1、错误描述
消息 300,级别 14,状态 1,第 1 行
拒绝了对对象 'server' (数据库 'master')的 VIEW SERVER STATE 权限。
消息 297,级别 16,状态 1,第 1 行
用户没有执行此操作的权限。
2、原因描述
一个只具有public服务器角色的用户,想要查询系统的动态视图,报出的错误;
3、解决办法
方法一:如果可以给用户sysadmin服务器角色的话,直接赋予即可(但是这种情况大部分公司都是不允许的)
方法二:直接赋予某个用户view server state的权限
命令:grant view server state to chaxun
取消权限的脚本如下:(下面2条SQL的任何一条都可以实现)
revoke view server state to chaxun ---撤销该权限
deny view server state to chaxun ---拒绝该权限
方法三:赋予public角色view server state的权限
注:赋予public角色这个权限后,所有具有public角色的用户都可以查看服务器级别的资源了(系统视图,系统存储过程等)
命令:grant view server state to public
取消权限的脚本如下:(下面2条SQL的任何一条都可以实现)
revoke view server state to public ---撤销该权限
deny view server state to public ---拒绝该权限
Tips:
revoke和deny取消权限的区别是什么?
答:
deny:指的是拒绝某一用户的某一权限,在服务器权限的系统视图(sys.server_permissions)里不会删除该用户的权限这一行记录,只是把状态改为了D
revoke:指的是撤销某用户的某一权限,在服务器权限的系统视图(sys.server_permissions)里会删除该用户的权限这一行记录