一、登录权限:sql server提供了两种身份验证模式:
1、Windows身份验证模式:
在使用Windows身份验证时,SQL server利用操作系统的Windows用户和密码进行验证。也就是说,用户的身份通过Windows验证后,SQL server无需再要求密码或进行额外验证。Windows身份验证比SQL server身份验证更安全,能够有效防范来自Internet的大多数攻击。这类验证适用于局域网内(如AD域)访问数据库的情况。需要注意的是,使用Windows身份验证时,必须将相应的用户账号添加到数据库的登录名列表中,否则无法成功登录,如下图所示:
2、SQL server和Windows身份验证模式(混合模式):
SQL server和Windows身份验证模式,即混合模式,允许用户使用Windows身份验证或SQL server身份验证进行连接。这种模式适用于非Windows系统环境的用户、Internet用户或混杂工作组用户访问SQL server的情况,如外部用户访问数据库或无法登录Windows域时。SQL server验证模式使用存储在SQL server数据库中的账号和密码,与客户端用户无关。
二、数据库的权限设置:
SQL server中的访问权限可以在服务器、数据库和对象三个级别进行设置。
可以将SQL Server比作一幢大楼,进入大楼需要通行证,即登录账户。通行证的类型(内部员工还是访客)决定了能否进入大楼,这取决于保安的检查方式(即身份验证模式)。数据库则好比大楼中的房间,进入大楼后还需房间钥匙(数据库用户)才能访问特定房间。每个房间内包含对象(如椅子、电脑、铅笔等),可以将其视为数据库中的表,并非每个进入房间的人都有权使用这些对象。这些对象按架构分配,用户可以通过架构访问架构下的所有对象。如果是房间的所有者,可以拥有房间内所有对象的使用权,并可以授权他人使用这些对象。
1、服务器级别权限设置
在SQL Server 2016中,内置了一组服务器角色(也称为固定服务器角色),用于执行服务器级别的管理任务,如创建数据库、管理和审核登录账户、终止SQL Server实例中长时间运行的进程等。这些角色作用于整台服务器,而非单个数据库。
用户可以拥有多个固定服务器角色权限,但固定服务器角色不能被修改、添加或删除。以下是服务器角色的列表:
2、数据库级别权限设置:
在创建任何数据库时,默认包含两个特殊用户:dbo(数据库所有者)和guest。前者拥有该数据库的所有权限;后者是来宾账户,无法删除,默认禁用且无任何权限。启用guest账号并授予权限时需谨慎。
服务器角色主要控制服务器登录名在服务器范围内的访问权限,但对于具体数据库的管理和操作权限设置则显得过于宽泛。因此,需要通过数据库角色对数据库级别的对象进行更细化的权限划分。SQL server默认提供的数据库角色如下:
固定数据库角色中还包含一个名为public的角色,用于捕获数据库中所有用户的默认权限,所有用户和角色默认属于public角色,且该角色无法删除。
3、对象级别权限设置:
数据库通常包含多个数据表、视图、存储过程等对象。如果赋予某个用户对数据库的读取权限,用户可以读取该数据库下的所有表或视图等。然而,如果只希望用户拥有查询某个特定对象的权限,则需要进行对象级别的权限设置。以下是为表授权的一些常用权限及其说明: