SQL Server 安全篇——SQL Server 安全模型(3)——数据库级别安全性
2018-01-22 11:03
351 查看
本文属于SQL Server安全专题系列
接上文SQLServer 安全篇——SQL Server 安全模型(2)——实例级别安全性
在数据库层面,以授权到安全主体来实现安全性。 相对于服务器级别,数据库级别称为数据库用户和数据库角色。
用户:
通常情况下,数据库用户是从实例层面创建的登录名来实现。相同实例下,一个登录名可以映射到多个数据库用户中,并且可以单独授权到数据库层面。从SQL 2012开始,也可以创建没有登录名的用户(包含数据库)带有登录名的用户:
通过SSMS或者T-SQL来创建用户,一般需要关联到一个被配置好权限的实例层面登录。常用的选项有:DEFAULT_SCHEMA:用户的默认架构,将在后续介绍。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS:允许在大容量复制(bulk copy)中使用数据加密。在后续章节介绍。
比如下面例子:在AdventureWorks2016CTP3中创建一个用户Danni,关联到用户Danni登录,并且默认架构为Sales:
USE AdventureWorks2016CTP3 GO CREATE USER Danni FOR LOGIN Danni WITH DEFAULT_SCHEMA = Sales ;
虽然没有强制规定必须与登录名一模一样,但是作为良好的管理来说应该保持一致,如果不指定默认架构,则默认为dbo。
不需要登录名的用户:
创建不带登录名的用户时,用户要么映射到Windows安全主体,要么使用SQL Server身份验证, 如果使用身份验证,前提条件是数据库必须已经配置为包含数据库,具体内容可见:包含的数据库这种情况下可用选项有:
DEFAULT_SCHEMA/ALLOW_ENCRYPTED_VALUE_MODIFICATIONS:同上。
DEFAULT_LANGUAGE:用户使用的默认语言。
SID:仅对SQL Server身份验证有效,指定用户关联的SID,多个库的同一个用户使用相同的SID,特别适合在灾难恢复和AlwaysON环境。
例子:创建一个叫做Phil用户,用户来自于Windows安全主体(域名\登录名:cartersecuresafe\phil),默认架构dbo。
USE AdventureWorks2016CTP3 GO CREATE USER [cartersecuresafe\phil] WITH DEFAULT_SCHEMA=dbo ;
数据库角色:
跟服务器角色类似,数据库也有内建角色,这些角色也具有预定好的一系列权限。也称为固定数据库角色(fixed database roles)。固定数据库角色跟服务器角色一样,只能增删用户,不能修改权限。角色 | 描述 |
db_accessadmin | 成员可在数据库中增删数据库用户。 |
db_backupoperator | 默认为了备份所用,对第三方工具不可用,第三方工具一般需要sysadmin权限。 |
db_datareader | 成员可以执行select命令在所有的表,可以使用DENY来禁用某些表的SELECT,因为DENY总覆盖GRANT。 |
db_datawriter | 成员可以执行DML语句到库的任何一个表。同理可以使用DENY来控制。 |
db_denydatareader | 与db_datareader相反,拒绝对库的所有select权限。 |
db_denydatawriter | 与db_datawriter相反。 |
db_ddladmin | 可以执行DDL命令,相对少用。 |
db_owner | 库的所有者,拥有库的所有权限。 |
db_securityadmin | 可以对用户,针对安全对象进行GRANT 、DENY、REVOKE,也可以修改除db_onwer之外的所有成员。 |
USE AdventureWorks2016CTP3 GO --创建角色 CREATE ROLE SalesRole AUTHORIZATION dbo ; GO --对角色授权 GRANT DELETE ON SCHEMA::Sales TO SalesRole ; GRANT INSERT ON SCHEMA::Sales TO SalesRole ; GRANT SELECT ON SCHEMA::Sales TO SalesRole ; GRANT UPDATE ON SCHEMA::Sales TO SalesRole ; --添加成员 ALTER ROLE SalesRole ADD MEMBER Danni ;
小结:
SQL Server实际的安全层级相当复杂。基于角色的安全性可以简化管理工作。另外充分合理地使用两种授权:Windows身份验证和SQL Server身份验证。能够更好地降低安全风险,另外建议优先使用Windows身份验证。SQL Server数据库引擎通常使用登录来实现实例级别的身份验证。一般登录名在数据库层会有用户对应,但是在包含数据库中则不需要非要有登录名。
下一篇会介绍SQL Server审计。
相关文章推荐
- SQL Server 安全篇——SQL Server 安全模型(2)——实例级别安全性
- SQL Server 安全篇——SQL Server 安全模型(1)——安全性主体层级
- 数据库安全:一些关于SQL Server 2000的安全配置
- 安全性测试(三)--数据库安全检查点
- SQL Server的安全模型
- SQL Server 2016新特性:数据库级别配置
- SQL Server的安全模型
- SQL SERVER 2008 数据库隔离级别代码演示
- 如何配置一个安全稳定的SQL SERVER的数据库
- SQL Server 审核(Audit)-- 创建数据库级别的审核
- 转:SQL Server 数据库安全
- SQL Server安全(10/11):行级别安全(Row-Level Security)
- 如何配置一个安全稳定的SQL SERVER的数据库
- 学会建立安全模型以保护SQL Server
- SQL Server 2008 数据库 安全性 设置 SQL Server身份验证
- SQL Server操作之数据库安全性和完整性
- SQL Server 2016新特性:行级别安全控制(Row-Level Security----RLS)
- SQL Server 安全篇——安全元数据(5)——元数据自身安全性
- 如何配置一个安全稳定的SQL SERVER的数据库.txt[转]
- SQL Server 2008 R2 安全性专题(一):安全原则