日期:2014-05-18  浏览次数:20514 次

权限查询
我们通常对某张表进行操作时,执行前都不进行检查是否具有权限.
有的同志会说,数据库自己判断,是的这是没有问题的.
      我想做的友好点,对表操作前先判断是否具有权限,如果没有权限直接就让他不能操作,而不是提交了再提示没有权限.
      我用了这样的语句判断好象不对,请您们帮忙看看如何解决.

EXEC   sp_table_privileges   'bmb ', 'dbo '
go
查询结果是  
TABLE_QUALIFIER TABLE_OWNER TABLE_NAME GRANTOR GRANTEE PRIVILEGE IS_GRANTABLE
Czwlxt dbo bmb dbo dbo DELETE YES
Czwlxt dbo bmb dbo dbo INSERT YES
Czwlxt dbo bmb dbo dbo REFERENCES YES
Czwlxt dbo bmb dbo dbo SELECT YES
Czwlxt dbo bmb dbo dbo UPDATE YES

从查询结果可以看出,当前登录用是对表bmb有插入权限,但执行插入语句就是显示没有权限。
insert   into   bmb(id,parent_id,bmdm,bmmc,bmzg,bz)   select   *     from   bmb
执行结果如下
服务器:   消息   229,级别   14,状态   5,行   1
拒绝了对对象   'bmb '(数据库   'Czwlxt ',所有者   'dbo ')的   INSERT   权限。

我的问题就是我怎样查询指定表的权限,又没有某张表插入权限,怎样判断。


------解决方案--------------------
是如没该用户对该表没有任何权限就会产生异常


LZ 这样做会降低应用程式的效率,个人觉得不是好办法

看见现在很多项目都喜欢做一个权限表来控制,而不是用grant和deny控制,
毕竟程序的效率比较重要


如果LZ一定要这么做可以去看看sp_helprotect 存储过程的源码,然后自己写一个适合自己用的

select * from syscomments