一个权限问题请教

SHHMing 2009-01-04 04:22:17
数据库a
数据库b
数据库c

a里面的一个存储过程要从b里面查数据,这没有问题

现在我修改a里面的存储过程同时也从c里面查数据


我从页面中执行该存储过程返回以下错误
Microsoft OLE DB Provider for SQL Server 错误 '80004005'

The server principal "xxx" is not able to access the database "数据库c" under the current security context.

请问应该怎么修改权限才行
...全文
67 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2009-01-05
  • 打赏
  • 举报
回复
--sql 2005
SQL Server Management Studio
服务器/安全/登录/找到需要添加权限的登录帐户/右键选择属性
/在弹出的对话框中/数据库权限/标签页中添加相应数据库权限
dawugui 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 SHHMing 的帖子:]
数据库a
数据库b
数据库c

a里面的一个存储过程要从b里面查数据,这没有问题

现在我修改a里面的存储过程同时也从c里面查数据


我从页面中执行该存储过程返回以下错误
Microsoft OLE DB Provider for SQL Server 错误 '80004005'

The server principal "xxx" is not able to access the database "数据库c" under the current security context.

请问应该怎么修改权限才行
[/Quote]
--sql 2000
创建角色,用户,权限

/*--示例说明
示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/

USE pubs

--创建角色 r_test
EXEC sp_addrole 'r_test'

--授予 r_test 对 jobs 表的所有权限
GRANT ALL ON jobs TO r_test
--授予角色 r_test 对 titles 表的 SELECT 权限
GRANT SELECT ON titles TO r_test

--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC sp_addlogin 'l_test','pwd','pubs'

--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC sp_grantdbaccess 'l_test','u_test'

--添加 u_test 为角色 r_test 的成员
EXEC sp_addrolemember 'r_test','u_test'

--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
DENY SELECT ON titles TO u_test

/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/

--从数据库 pubs 中删除安全账户
EXEC sp_revokedbaccess 'u_test'

--删除登录 l_test
EXEC sp_droplogin 'l_test'

--删除角色 r_test
EXEC sp_droprole 'r_test'
firecc05 2009-01-04
  • 打赏
  • 举报
回复
1.先找出应用程序连接字符串的登录帐号。
2. 2000用企业管理器,2005用SSMS。
展开 服务器->安全->登录,找到需要添加权限的登录帐户,右键选择属性
在弹出的对话框中的 数据库权限 标签页中添加相应数据库权限
firecc05 2009-01-04
  • 打赏
  • 举报
回复
这说明页面应用程序的连接字符串所代表的登录是没有数据库c的访问权限的,给它加上数据库c的访问权限啊。
SHHMing 2009-01-04
  • 打赏
  • 举报
回复
数据库a
数据库b
数据库c

原先a里面的一个存储过程是从b里面的某个表查数据

现在我修改a里面的存储过程同时也从c里面的某个表查数据


我从页面中执行该存储过程返回以下错误
Microsoft OLE DB Provider for SQL Server 错误 '80004005'

The server principal "xxx" is not able to access the database "数据库c" under the current security context.

xxx是指server principal的名字
数据库c是指数据库c的名字


水族杰纶 2009-01-04
  • 打赏
  • 举报
回复
不理解~~

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧