SQL Server是一个关系型数据库管理系统,它提供了多种安全性功能,包括服务器角色和数据库角色。这两种角色都是一组权限的集合,可以分配给用户或其他角色,以控制对数据库对象和资源的访问。本文将介绍服务器角色和数据库角色的概念、区别和应用。
服务器角色是在SQL Server实例级别定义的,它们适用于整个实例中的所有数据库。服务器角色可以分为两类:固定服务器角色和用户定义服务器角色。固定服务器角色是预定义的,它们具有特定的权限,不能修改或删除。用户定义服务器角色是由用户创建的,它们可以自定义权限,并可以添加或删除成员。SQL Server提供了九个固定服务器角色,如下表所示:
| 固定服务器角色 | 描述 |
| sysadmin | 具有对所有活动和资源的完全控制权 |
| serveradmin | 具有管理服务器级别配置选项和关闭服务器的能力 |
| securityadmin | 具有管理登录名、密码策略和审核的能力 |
| processadmin | 具有终止在实例上运行的进程的能力 |
| setupadmin | 具有管理链接服务器和扩展存储过程的能力 |
| bulkadmin | 具有执行批量插入操作的能力 |
| diskadmin | 具有管理磁盘文件的能力 |
| dbcreator | 具有创建、更改、删除和恢复数据库的能力 |
| public | 是所有登录名默认属于的服务器角色 |
数据库角色是在每个数据库级别定义的,它们只适用于所属的数据库。数据库角色也可以分为两类:固定数据库角色和用户定义数据库角色。固定数据库角色是预定义的,它们具有特定的权限,不能修改或删除。用户定义数据库角色是由用户创建的,它们可以自定义权限,并可以添加或删除成员。SQL Server提供了十个固定数据库角色,如下表所示:
| 固定数据库角色 | 描述 |
| db_owner | 具有对数据库中所有对象和资源的完全控制权 |
| db_securityadmin | 具有管理数据库级别权限、模式、证书、密钥和签名的能力 |
| db_accessadmin | 具有添加或删除数据库用户、组或角色的能力 |
| db_backupoperator | 具有备份或还原数据库的能力 |
| db_ddladmin | 具有在数据库中执行数据定义语言(DDL)语句的能力 |
| db_datawriter | 具有在数据库中任何用户表中添加、删除或更改数据的能力 |
| db_datareader | 具有在数据库中任何用户表中读取数据的能力 |
| db_denydatawriter | 拒绝在数据库中任何用户表中添加、删除或更改数据的能力 |
| db_denydatareader | 拒绝在数据库中任何用户表中读取数据的能力 |
| public | 是所有用户默认属于的数据库角色 |
服务器角色和数据库角色的主要区别在于作用域和权限。服务器角色的作用域是整个实例,而数据库角色的作用域是单个数据库。服务器角色的权限是针对实例级别的对象和资源,如登录名、服务器配置、链接服务器等,而数据库角色的权限是针对数据库级别的对象和资源,如表、视图、存储过程等。另外,服务器角色和数据库角色之间也存在一些关系,例如:
1.sysadmin服务器角色的成员隐式地属于每个数据库的db_owner数据库角色
2.dbcreator服务器角色的成员隐式地属于他们创建的数据库的db_owner数据库角色
3.public服务器角色和public数据库角色是所有用户都必须属于的默认角色
服务器角色和数据库角色的应用主要是为了实现安全性原则中的最小特权原则,即只授予用户或其他角色执行任务所需的最小权限,以减少安全风险和错误操作。为了管理服务器角色和数据库角色,可以使用SQL Server管理工具或T-SQL语句。