Security9:查询Login被授予的权限
在SQL Server的安全体系中,权限分为服务器级别(Server-Level)和数据库级别(Database-Level),获得权限的途径分为两种形式:直接授予的权限,由于加入角色而获得的权限。在安全体系中,授予权限涉及到有三种对象,分别是权限(Permission)、安全主体(Principal)和安全对象(Securable),授予权限的过程,可以用一句话概括:Grants permissions on a securable to a principal。
一,查看服务器级别的权限
在服务器级别,安全主体(Principal)是指Login和Server Role,权限对应的是服务器级别的权限。
1,查看服务器级别的安全主体
系统视图:sys.server_principals 用于查看服务器级别的安全主体:
- name:主体的名称
- principal_id:主体ID
- sid:主体的SID (Security-IDentifier),如果主体是Windows的登陆或组,那么该字段是Winows SID
- type:主体的类型,常见的主体类型是:SERVER_ROLE、SQL_LOGIN、WINDOWS_GROUP、WINDOWS_LOGIN
2,从角色而获得的权限
系统视图:sys.server_role_members 用于查看属于服务器角色(Server Role)的Login:
select r.principal_id as role_id
,r.name as role_name
,r.is_fixed_role
,r.type_desc as role_type
,m.principal_id as member_id
,m.name as member_name
,m.is_disabled
,m.type_desc as member_type
from sys.server_role_members srm
inner join sys.server_principals r
on srm.role_principal_id=r.principal_id
inner join sys.server_principals m
on srm.member_principal_id=m.principal_id
3,直接授予的权限
系统视图:sys.server_permissions,用于查看服务器级别的权限
- class:权限存在的分类,常见的分类是:SERVER、SERVER_PRINCIPAL、ENDPOINT
grantee_principal_id:指定被授予权限的主体ID,grantor_principal_id 指定:授予者的主体ID。
- type:服务器级别的权限类型(server permission type);
- permission_name:服务器级别的权限的名称;
- state和state_desc:权限的状态,分别是DENY、REVOKE、GRANT、GRANT_WITH_GRANT_OPTION;
如果安全主体是Login,那么查看Login被直接授予的权限;如果安全主体是Role,那么查看Role被授予的权限。
select pr.principal_id
,pr.name as principal_name
,pr.type_desc as principal_type
,pe.class_desc as class
,pe.permission_name
,pe.state_desc as state
from sys.server_principals pr
inner join sys.server_permissions pe
on pr.principal_id=pe.grantee_principal_id
二,查看Login和User的映射
Login和User 通过sid关联,用户是存在于特定数据库的安全主体,如果User没有映射到Login,那么该用户称作孤立用户(Orphaned User),也就是说,User的sid不能映射到Login的sid。
select sp.principal_id as login_id
,sp.name as login_name
,sp.type_desc as login_type
,dp.principal_id as user_id
,dp.name as user_name
,dp.type_desc as user_type
,dp.authentication_type_desc as authentication_type
from sys.server_principals sp
inner join sys.database_principals dp
on dp.sid=sp.sid
三,查看数据库级别的权限
在数据库级别,安全主体是User和Role,权限对应的是数据库级别的权限,包括操作数据库对象,执行的权限等。
1,查看数据库级别的安全主体
系统视图:sys.database_principals 用于查看数据库级别的安全主体:
- name:主体的名称;
- principal_id:主体ID;
- sid:主体的SID (Security-IDentifier),如果主体是Windows的登陆或组,那么该字段是Winows SID;
- type和type_desc:主体的类型,常见的主体类型是:SQL_USER、WINDOWS_USER、WINDOWS_GROUP、DATABASE_ROLE;
- authentication_type:验证类型,常见的是DATABASE 和 WINDOWS;
- owning_principal_id:安全主体(Principal)的所有者,除了数据角色之外的所有主体的所有者必须是dbo;
系统视图:sys.database_permissions 用于查看数据库级别的权限:
- class:权限存在的分类,常见的分类是:DATABASE、OBJECT_OR_COLUMN、SCHEMA、DATABASE_PRINCIPAL
grantee_principal_id指定:被授予权限的主体ID,grantor_principal_id 指定:授予者的主体ID。
- type:数据库级别的权限类型(server permission type);
- permission_name:数据库级别的权限的名称;
- state:权限的状态,分别是DENY、REVOKE、GRANT、GRANT_WITH_GRANT_OPTION;
- major_id和minor_id:
安全对象(Securable):通过major_id 和 minor_id 指定安全对象
major_id:该字段共有3种类型的数值:
- 正整数,标识数据库对象,是object_id;
- 0,标识数据库级别的授权,class是DATABASE;
- 负整数,标识系统对象;
minor_id:该字段共有2种类型的数值:
- 正整数,标识的是数据库对象的column_id,该字段连接到sys.columns中的column_id;
- 0,标识的是整个数据库对象object;
系统视图:sys.database_role_members 用于查看数据库级别的角色和数据库主体的映射关系。
2,查看数据库级别的安全主体的权限
安全主体包括User和数据库级别的role,通过以下脚本查看它们的权限,这是直接授予安全主体的权限:
select pr.principal_id
,pr.name as principal_name
,pr.type_desc as principal_type
,pr.is_fixed_role
,pr.authentication_type_desc as authentication_type
,pe.permission_name
,pe.class_desc as permission_class
,pe.state_desc as permission_state
,pe.major_id
,pe.minor_id
from sys.database_principals as pr
inner join sys.database_permissions as pe
on pe.grantee_principal_id = pr.principal_id
order by pr.name;
2,从数据库角色获得的权限
查询数据库Role的成员,可以查看数据库用户从数据库角色获得的权限:
select r.principal_id as role_id
,r.name as role_name
,r.type_desc as role_type
,r.is_fixed_role
,u.name as member_name
,u.type_desc as member_type
,u.authentication_type_desc as member_authentication
from sys.database_role_members rm
inner join sys.database_principals r
on rm.role_principal_id=r.principal_id
inner join sys.database_principals u
on rm.member_principal_id=u.principal_id
where r.type='R' --database role
order by role_name
四,查看用户在表、view或schema上的权限
用户可以被授予数据库对象上或schema上的权限
1,查看用户在对象上的权限
select pr.principal_id
,pr.name
,pr.type_desc
,pr.authentication_type_desc
,pe.permission_name
,pe.class_desc
,pe.state_desc
,o.name as object_name
,isnull(c.name,'entire_table') as column_name
from sys.database_principals as pr
inner join sys.database_permissions as pe
on pe.grantee_principal_id = pr.principal_id
inner join sys.objects as o
on pe.major_id=o.object_id
left join sys.columns c
on o.object_id=c.object_id
and pe.minor_id=c.column_id
where pe.class=1 -- Object or Column
order by pr.name
,o.name
,c.column_id;
2,查看用户在schema上的权限
select pr.principal_id
,pr.name
,pr.type_desc
,pr.authentication_type_desc
,pe.permission_name
,pe.class_desc
,pe.state_desc
,s.name as schema_name
from sys.database_principals as pr
inner join sys.database_permissions as pe
on pe.grantee_principal_id = pr.principal_id
inner join sys.schemas as s
on pe.major_id=s.schema_id
where pe.class=3 -- Object or Column
order by pr.name;
参考文档:
Getting Started with Database Engine Permissions
Security Catalog Views (Transact-SQL)
Security9:查询Login被授予的权限的更多相关文章
- Security6:查看授予的权限
在SQL Server的安全体系中,权限分为服务器级别(Server-Level)和数据库级别(Database-Level),用户的权限分为两种形式,分别是直接授予的权限,以及由于加入角色而获得的权 ...
- MySQL 查看用户授予的权限
在MySQL中,如何查看一个用户被授予了那些权限呢? 授予用户的权限可能分全局层级权限.数据库层级权限.表层级别权限.列层级别权限.子程序层级权限.具体分类如下: 全局层级 全局权限适用于一个给定 ...
- 【解决】SharePoint集成模式下Reporting Service—为用户授予的权限不足,无法执行此操作。 (rsAccessDenied)
环境:Windows Server 2008 R2 SP1,SharePoint 2010 企业版,SQL Server 2008 R2 Reporting Service(SharePoint集成模 ...
- SSRS:之为用户“NT AUTHORITY\NETWORK SERVICE”授予的权限不足,无法执行此操作。 (rsAccessDenied)
错误信息: 为用户"NT AUTHORITY\NETWORK SERVICE"授予的权限不足,无法执行此操作. (rsAccessDenied) 如图: 解决方案之检查顺序: 1. ...
- 查询login什么时候过期
-- Show all logins where the password is over 60 days old --查看60天没改密码的login SELECT name, LOGINPROPER ...
- Oracle dba权限下修改用户密码 授予用户权限 解锁用户
1.修改用户密码 alter user scott identified by 123 2.授予用户权限 grant connect,resource to scott 3.解锁用户 alter us ...
- 未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f351905198cb3”或它的某一个依赖项。未能授予最小权限请求
问题:运行程序执行到代码报错:未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f3519051 ...
- Jenkins用户授予root权限
Jenkins用户授予root权限 由于需要在jenkins中执行shell脚本,但是有些目录下没有权限,下面的操作为jenkins用户授予root权限. jenkins用户加入到root组 ...
- Windows Server 2008 R2 为用户“IIS APPPOOL\DefaultAppPool”授予的权限不足,无法执行此操作
报表开发与部署好后,也嵌入到aspx页面中了,使用VS自带的Web服务器组件,一切正常,当部署到IIS中的时,出现了如下错误: 为用户“IIS APPPOOL\DefaultAppPool”授予的权限 ...
随机推荐
- HDU5937 Equation(DFS + 剪枝)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5937 Description Little Ruins is a studious boy, ...
- 【转】iOS学习之translucent属性
原文地址:http://www.jianshu.com/p/930643270455 总所周知,苹果从iOS7开始采用扁平化的界面风格,颠覆了果粉们"迷恋"的拟物化风格.对于开发者 ...
- Spring AOP详解
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- C#在Linux+Mono环境中使用微信支付证书
最近特殊的需求,要把微信平台一个功能页面部署到Linux(CentOS6.5)下,其中涉及到微信支付退款. 鉴于之前实践过mono+jexus+asp.net mvc的部署,于是问题重点在于解决对商户 ...
- 搭建ssh后的简化
对于SSh框架的简化,我们可以从下面几个方面来剖析: 1.实体类entity 2.注入 3.类注解 下面,我来一一为大家讲解.ps:写的不好还请多多指教,欢迎大家"来找茬". 关于 ...
- 《一个操作系统的实现》学习笔记(一) bochs源码安装及配置
前言:本机环境ubuntu 14.04 bochs 2.4.5 一.下载 官网 http://bochs.sourceforge.net/ 二.安装 1.将下载好的压缩包解压并进入该目录 .tar.g ...
- php 图片上传的公共方法(按图片宽高缩放或原图)
写的用于图片上传的公共方法类调用方法: $upload_name='pic';$type = 'logo_val';$file_name = 'logo_' . $user_id .create_st ...
- 思科交换机配置DHCP的四个方面
这里我们主要讲解了思科交换机配置DHCP的相关内容.我们对网络拓扑先进行一下了解,然后对于其在进行一下说明,之后对于配置的代码和命令再进行一下解析. 思科交换机配置DHCP一.网络拓扑 思科交换机配置 ...
- Third Day(上班第四天):Android开发环境配置问题相关
换公司新电脑了,重新安装Android开发环境,并配置,具体流程如下:1.百度JDK,访问Oracle官网:http://www.oracle.com/technetwork/java/javase/ ...
- 基于AngularJS的企业软件前端架构[转载]
这篇是我参加QCon北京2014的演讲内容: 提纲: 企业应用在软件行业中占有很大的比重,而这类软件多数现在也都采用B/S的模式开发,在这个日新月异的时代,它们的前端开发技术找到了什么改进点呢? B/ ...