SQL SERVER登录用户在服务器上的权限

SQL SERVER登录用户在服务器上的权限

一个登录用户到底在SQL SERVER实例上有什么样的权限,下面以SQL SERVER2005为例来细数一下。
一. 首先查看该登录用户属于哪个固定服务器角色。所有SQL SERVER的登录用户和角色都会在master.sys.server_principal视图上有一条记录。而记录登录用户属于什么服务器角色的视图是master.sys.server_role_members。
二. 查看登录用户在服务器级别上有什么权限,该权限记录于视图sys.server_permissions中。
三. 查看登录用户在服务器级别上有什么所有权。注意不同于上面的权限,因为SQL SERVER是不能向安全对象的所有者分配权限的,所以权限和所有权是分开的。所有权见下图。
四. 检查所有的数据库,看是否有数据库用户映射至该登录名。SQL SERVER2005中同一数据库中的不同用户不能映射至同一登录名。映射关系记录于视图sys.database_principals中。
若没有用户映射,则检查此数据库中guest用户是否激活。若激活则在此数据库中拥有guest的权限;若没有激活,则在此数库中没有权限。
若有用户映射,则该数据库用户的权限就是登录用户在该数据库中的权限。
五. 上面的数据库用户(可能就是guest用户),它们的权限到底是什么呢?
首先要检查该数据库用户是否属于数据库角色(固定角色、自定义角色和应用程序角色),所有的用户和角色都记录于相应数据库的sys.databse_principals视图中。而记录用户属于什么角色的视图是sys.database_role_member。
若用户属于某个角色,则用户就拥有该角色的权限。一个用户可以同时属于多个角色,而且一个角色可以属于另一个角色。下面的代码演示了在SQL SERVER 2005中如何显示一个用户(user1)所属的所有角色的名称:
;with members as
( select *
from sys.database_role_members
where user_name(member_principal_id) = 'user1'
  union all
select b.*
from members a
join sys.database_role_members b
on b.member_principal_id = a.role_principal_id
)
select user_name(role_principal_id)
from members

因为所有的数据库用户必然属于public角色,因此所有用户必然拥有Public角色的权限。
知道了所属的角色,下面的问题就简单了。角色以及数据库用户的权限记录于视图sys.databaser_permissions中。
六. 我们还需要查看用户和角色在数据库级别上有什么所有权。所有权见下图。
七. 若在其他主体上有Impersonate的权限,则表示拥有这些主体的所有的权限。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值