已经赋予运行储存过程的权限了,只是存储过程里的exec重新检查权限而已

解决方案 »

  1.   

    现在在存储过程中直接运行"select * from work"是可以运行的,但是在运行 exec("select * from work")的时候就好碰到 没有select权限的错误。
    -----------------------------------------
    我的意思是就让他执行储存过程,不要让他执行exec().
      

  2.   

    exec("select * from work")这句是应用程序里写的吗?是的话就没问题了呗。
      

  3.   

    视图或存储过程为赋予用户访问数据与执行操作的能力提供了第二种方法。它们使用户可以访问数据库中的基础项,并回避为特定对象和语句直接定义的权限。视图可以基于其它视图或表。过程可以基于其它过程、视图或表。可以将这些相关性视为所有权链。所有权链只适用于 SELECT、INSERT、UPDATE 和 DELETE 语句。通常,视图的所有者还拥有基础对象(其它视图或表),而存储过程的所有者经常拥有引用的所有过程、表和视图。另外,视图或基础对象通常都在同一数据库中,存储过程和所有引用的对象也如此。当在存储过程内创建临时临时对象时,它们由过程所有者拥有而不是由当前执行过程的用户拥有。当用户访问某个视图时,如果该视图的基础对象和此视图都为同一用户所有,或者如果该视图及其所有基础对象都在同一数据库中,则 Microsoft® SQL Server™ 不检查该视图基础对象上的权限。如果同一用户拥有存储过程及其所引用的所有视图和表,或者如果存储过程及其对象都在同一数据库中,SQL Server 就只检查过程上的权限。如果过程或视图的所有权链破坏了(链中的所有对象并不为同一用户所有),SQL Server 就会检查在链中每个下一个更低链接为另一用户所有的对象上的权限。通过这种方式,SQL Server 使得原始数据的所有者可以保留对原始数据可用性的控制。
      

  4.   

    如果同一用户拥有存储过程及其所引用的所有视图和表,或者如果存储过程及其对象都在同一数据库中,SQL Server 就只检查过程上的权限。