Security6:查看授予的权限

简介:

在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:权限的状态,分别是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:主体的类型,常见的主体类型是: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;
  • 安全对象(Securable):通过major_id 和 minor_id 指定安全对象

major_id:该字段共有3种类型的数值:

  • 正整数,标识数据库对象,是object_id;
  • 0,标识数据库级别的授权,class是DATABASE;
  • 负整数,标识系统对象;

minor_id:该字段共有2种类型的数值:

  • 正整数,标识的是数据库对象的column_id,该字段连接到sys.columns中的column_id;
  • 0,标识的是整个数据库对象object;

2,查询数据库Role的成员

系统视图:sys.database_role_members 用于查看数据库级别的角色和数据库主体的映射关系。

复制代码
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
复制代码

3,查看数据库级别的安全主体的权限

复制代码
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;
复制代码

4,查看数据库对象上的权限

复制代码
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;
复制代码

5,查看数据库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;
复制代码

 

参考文档:

Security Catalog Views (Transact-SQL)

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: Security
标签: Security, 安全, 权限

本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5610029.html,如需转载请自行联系原作者
目录
相关文章
|
机器学习/深度学习 并行计算 测试技术
MLX vs MPS vs CUDA:苹果新机器学习框架的基准测试
如果你是一个Mac用户和一个深度学习爱好者,你可能希望在某些时候Mac可以处理一些重型模型。苹果刚刚发布了MLX,一个在苹果芯片上高效运行机器学习模型的框架。
637 1
|
6月前
|
人工智能 程序员 iOS开发
一文彻底拿下HarmonyOS NEXT开发实战调试技巧
这是一篇关于HarmonyOS NEXT开发调试技巧的文章,作者是一名经验丰富的程序员Feri。内容涵盖三种调试方法:预览+日志方式(适合简单调试,需注意数据类型转换)、断点调试(详细介绍了设置步骤与功能键使用)以及hilog实战使用(日志打印限制为4096字节,推荐封装维护)。通过这些技巧,帮助开发者更高效地解决问题,提升编程能力。
204 14
一文彻底拿下HarmonyOS NEXT开发实战调试技巧
|
关系型数据库 MySQL 分布式数据库
使用Sqoop从Mysql向云HBase同步数据
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具。本文介绍如何使用sqoop将数据从Mysql导入到HBase。从成本的角度考虑,针对没有hadoop集群的用户,重点介绍单机运行sqoop的配置和参数。
5875 0
|
SQL 关系型数据库 MySQL
Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
【2月更文挑战第9天】Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
463 7
|
前端开发 容器
彻底理解粘性定位 - position: sticky
彻底理解粘性定位 - position: sticky
|
自然语言处理 搜索推荐 机器人
云上数字客服:重塑客户服务体验的智能化转型
技术成熟度:目前云上数字客服技术仍在不断发展和完善中,技术成熟度有待提高。 数据安全与隐私保护:随着客户数据的不断增加,如何确保数据的安全性和隐私性成为亟待解决的问题。 人机交互体验:虽然智能客服机器人已经取得了很大进展,但在某些复杂场景下仍难以完全替代人工客服,需要不断优化人机交互体验。 五、未来展望 随着技术的不断进步和市场环境的不断变化,云上数字客服将迎来更加广阔的发展前景。未来,云上数字客服将更加注重技术的创新和应用场景的拓展,不断提升服务质量和效率;同时加强数据安全和隐私保护,确保客户信息的安全性;此外还将积极探索与其他智能系统的融合应用,如智能营销、智能供应链等,为企业提供更全面的
909 7
|
存储 数据可视化 前端开发
PHP中的数据结构可视化:深入探索与实现
本文探讨了PHP中数据结构可视化的价值,强调其在理解、调试和优化代码中的作用。文中列举了数据结构如数组、栈、队列等,并介绍了三种可视化方法:使用第三方库、自定义渲染函数和集成前端工具。通过示例展示了如何使用PHP的GD库和自定义函数可视化二叉树。最后,指出数据结构可视化并非总是适用,但结合前端技术可实现更高效解决方案,并鼓励开发者充分利用此工具提升项目性能。
161 3
|
存储 Kubernetes 监控
容器服务 Kubernetes 版 ACK功能特性
分布式云容器平台ACK One(Distributed Cloud Container Platform for Kubernetes)是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级云原生平台。ACK One可以连接并管理您任何地域、任何基础设施上的Kubernetes集群,并提供一致的管理和社区兼容的API,支持对计算、网络、存储、安全、监控、日志、作业、应用、流量等进行统一运维
309 1
|
存储 运维 网络协议
穿越网络界限:探索NAT IPv4的神秘面纱
穿越网络界限:探索NAT IPv4的神秘面纱
305 1
|
SQL 监控 关系型数据库
解密SQL性能异常事件及阿里云数据库的性能调优实践
作为开发者想必都知道数据库是现代应用的核心组件之一,而且在当今互联网时代之下,SQL查询的性能直接影响系统的整体性能,它的性能对于系统的稳定性和响应速度至关重要。那么本文就来讨论一下SQL性能异常的排查和优化方法,包括我个人印象深刻的SQL性能异常事件,以及分享一下使用阿里云数据库产品/工具进行SQL性能调优的经验和心得体会。
343 1
解密SQL性能异常事件及阿里云数据库的性能调优实践