关于表格权限问题

dongrui121 2009-12-04 03:48:36
表格tableA
存储过程proA,在存储过程内部通过组装@sql,然后exec(@sql)来查询tableA的数据。
存储过程proB,在存储过程内写select * from tableA,直接查询tableA的数据。

赋予数据库用户对proA的执行权限,不给tableA查询权限。

结果:
proA不能查询
proB能成功查询

问题:为什么ProA不能查询?要如何解决?
...全文
154 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongrui121 2009-12-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 duanze82 的回复:]
存储过程的 EXECUTE 权限默认给该存储过程的所有者,该所有者可以将此权限转让给其他用户。当遇到 EXECUTE 语句时,即使 EXECUTE 语句是在存储过程中,也会检查在 EXECUTE 字符串内使用该语句的权限。当运行一个执行字符串的存储过程时,系统会在执行该过程的用户环境中,而不是在创建该过程的用户环境中检查权限。但是,如果某用户拥有两个存储过程,并且第一个过程调用第二个过程,则在第二个过程中不进行 EXECUTE 权限检查。

[/Quote]


我用两个存储过程,第一个存储过程调用第二个存储过程,把动态生成的@sql传递给第二个存储过程,但是还是不行,仍然说没有权限!
biny101 2009-12-05
  • 打赏
  • 举报
回复
UP
dongrui121 2009-12-05
  • 打赏
  • 举报
回复
召唤高人~
dongrui121 2009-12-04
  • 打赏
  • 举报
回复
这个权限问题 确实麻烦.
win7cc 2009-12-04
  • 打赏
  • 举报
回复
存储过程内部通过组装@sql...... 到底存储过程是什么
長胸為富 2009-12-04
  • 打赏
  • 举报
回复
你可能是某个地方设置有问题,这个是帮助中的原话
feixianxxx 2009-12-04
  • 打赏
  • 举报
回复

别用动态 行不
dongrui121 2009-12-04
  • 打赏
  • 举报
回复
现在问题就是存储过程中是动态组合的@sql语句,所以就要用execute(@sql)来执行,这样会检查在 EXECUTE 字符串内使用该语句的权限,也就是检查用户是否拥有该表的查询权限。

我不想给表格权限,但是存储过程的execute(@sql)又需要这个权限,怎么办?
lweia 2009-12-04
  • 打赏
  • 举报
回复
能给一个测试脚本么?
我读不懂,没法回答...
feixianxxx 2009-12-04
  • 打赏
  • 举报
回复

执行存储过程 只需要存储过程的权限 不需要内部基表的权限
dongrui121 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 duanze82 的回复:]
存储过程的 EXECUTE 权限默认给该存储过程的所有者,该所有者可以将此权限转让给其他用户。当遇到 EXECUTE 语句时,即使 EXECUTE 语句是在存储过程中,也会检查在 EXECUTE 字符串内使用该语句的权限。当运行一个执行字符串的存储过程时,系统会在执行该过程的用户环境中,而不是在创建该过程的用户环境中检查权限。但是,如果某用户拥有两个存储过程,并且第一个过程调用第二个过程,则在第二个过程中不进行 EXECUTE 权限检查。

[/Quote]

上面说错了
我将动态生成的@sql作为参数,传递给第二个存储过程proC,在proC中执行execute(@sql),并赋给用户proC的执行权限,还是不行。说没有权限
dongrui121 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 duanze82 的回复:]
存储过程的 EXECUTE 权限默认给该存储过程的所有者,该所有者可以将此权限转让给其他用户。当遇到 EXECUTE 语句时,即使 EXECUTE 语句是在存储过程中,也会检查在 EXECUTE 字符串内使用该语句的权限。当运行一个执行字符串的存储过程时,系统会在执行该过程的用户环境中,而不是在创建该过程的用户环境中检查权限。但是,如果某用户拥有两个存储过程,并且第一个过程调用第二个过程,则在第二个过程中不进行 EXECUTE 权限检查。

[/Quote]

我将动态生成的@sql作为参数,传递给第二个存储过程proB,在proB中执行execute(@sql),并赋给用户proB的执行权限,还是不行。说没有权限
長胸為富 2009-12-04
  • 打赏
  • 举报
回复
存储过程的 EXECUTE 权限默认给该存储过程的所有者,该所有者可以将此权限转让给其他用户。当遇到 EXECUTE 语句时,即使 EXECUTE 语句是在存储过程中,也会检查在 EXECUTE 字符串内使用该语句的权限。当运行一个执行字符串的存储过程时,系统会在执行该过程的用户环境中,而不是在创建该过程的用户环境中检查权限。但是,如果某用户拥有两个存储过程,并且第一个过程调用第二个过程,则在第二个过程中不进行 EXECUTE 权限检查。
長胸為富 2009-12-04
  • 打赏
  • 举报
回复
当遇到 EXECUTE 语句时,即使 EXECUTE 语句是在存储过程中,也会检查在 EXECUTE 字符串内使用该语句的权限。
--小F-- 2009-12-04
  • 打赏
  • 举报
回复
proA不能查询

你的意思是用存储过程来调用存储过程?
华夏小卒 2009-12-04
  • 打赏
  • 举报
回复
赋予数据库用户对proA的执行权限,不给tableA查询权限。

感觉这个是自相矛盾。


权限不是很懂!~~
dongrui121 2009-12-04
  • 打赏
  • 举报
回复
2楼,这个没有说明这个问题呀。

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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