权限查询
我们通常对某张表进行操作时,执行前都不进行检查是否具有权限.
有的同志会说,数据库自己判断,是的这是没有问题的.
我想做的友好点,对表操作前先判断是否具有权限,如果没有权限直接就让他不能操作,而不是提交了再提示没有权限.
我用了这样的语句判断好象不对,请您们帮忙看看如何解决.
EXEC sp_table_privileges 'bmb ', 'dbo '
go
查询结果是
TABLE_QUALIFIERTABLE_OWNERTABLE_NAMEGRANTORGRANTEEPRIVILEGEIS_GRANTABLE
CzwlxtdbobmbdbodboDELETEYES
CzwlxtdbobmbdbodboINSERTYES
CzwlxtdbobmbdbodboREFERENCESYES
CzwlxtdbobmbdbodboSELECTYES
CzwlxtdbobmbdbodboUPDATEYES
从查询结果可以看出,当前登录用是对表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