课件第12章 数据库安全机制.ppt
LOGO2项目七 SQL Server的身份验证模式 SQL Server的登录账户的管理 用户的管理角色管理和权限管理本章主要内容:本章主要内容: 数据库的安全性是指防止不合法的使用而造成数据库中数据的泄露、更改或破坏。SQL Server 2016的整个安全体系结构从顺序上可以分为认证和授权两个部分,其安全机制可以分为如下5个层级。(1)客户机安全机制(2)网络传输的安全机制(3)实例级别安全机制(4)数据库级别安全机制(5)对象级别安全机制12.1 SQL Server 2016安全安全性概述性概述12.1.1 SQL Server网络安全基础网络安全基础4个核心组件为:个核心组件为:Secure by design。作为抵御黑客。作为抵御黑客及保护数据的基础,软件需要进行安全设及保护数据的基础,软件需要进行安全设计。计。Secure by default。系统管理员不。系统管理员不必操心新安装的安全,默认设置即可保证。必操心新安装的安全,默认设置即可保证。Secure in deployment。软件自身。软件自身应能更新最新的安全补丁,并能协助维护。应能更新最新的安全补丁,并能协助维护。Communications。交流最佳实践和。交流最佳实践和不断发展的威胁信息,以使管理员能够主不断发展的威胁信息,以使管理员能够主动地保护系统。动地保护系统。 用“SQL Server外围应用配置器”工具来启用远程访问。可以通过如下操作来配置远程访问,启用远程访问连接。 (1)从“开始”菜单中选择“所有程序”|“Microsoft SQL Server 2016”|SQL Server Management Studio命令,启动SSMS,如图12-1所示。 (2)在“连接到服务器”对话框中,选择服务器名称和身份验证方式,单击“连接”按钮,如图12-2所示。 (3)右击服务器节点,在“对象资源管理器”窗口中右击服务器节点,从弹出的快捷菜单中选择“方面”命令,如图12-3所示。图12-1 通过“开始”菜单启动SSMS图12-3 选择“方面”命令图12-2 “连接到服务器”对话框 (4) 在打开的在打开的“查看方面查看方面”对话框中,选对话框中,选择择“外围应用配置器外围应用配置器”选项,如图选项,如图12-4所示。所示。图12-4 “查看方面”对话框 (5) 在该对话框中,可以设置“外围应用配置器”相关的选项,设置完成后,单击“确定”按钮即可。12.1.2 SQL Server 2016安全性安全性体系结构体系结构 SQL Server的安全结构包括身份的安全结构包括身份验证、有效性验证和权限管理。其功能验证、有效性验证和权限管理。其功能结构基于如下结构基于如下3个基本实体:个基本实体:(1)主体:安全帐户。)主体:安全帐户。(2)安全对象:要保护的对象。)安全对象:要保护的对象。(3)权限:为主体访问安全对象所提)权限:为主体访问安全对象所提供的权限。供的权限。安全对象安全对象Server 角色SQL Server 登录Windows 组域用户账户本地用户账户用户数据库角色应用程序角色组SQL Server数据库数据库Windows文件密钥服务器架构数据库安全对象权限主体主体SQL Server 2016 权限权限Server 角色SQL Server 登录Windows 组域用户账户本地用户账户用户数据库角色应用程序角色组SQL Server数据库数据库Windows文件密钥CREATEALTERDROPCONTROLCONNECTSELECTEXECUTEUPDATEDELETEINSERTTAKE OWNERSHIPVIEW DEFINITIONBACKUP授予授予/撤销撤销/拒绝拒绝ACL服务器架构数据库安全对象权限主体主体12.1.2 SQL Server 2016安全性安全性体系结构体系结构1. SQL Server身份验证身份验证 SQL Server使用两种机制来验证用使用两种机制来验证用户。户。SQL Server可以使用内部机制来验可以使用内部机制来验证登录,或者依靠证登录,或者依靠Windows来验证登录。来验证登录。每种方法都有其优缺点。每种方法都有其优缺点。 (1) SQL Server身份验证模式身份验证模式 这是这是SQL Server早期版本身份验证早期版本身份验证登录的标准机制。使用这种方法,登录的标准机制。使用这种方法,SQL Server在其主目录中存储一个登录名和加在其主目录中存储一个登录名和加密密码。它不考虑用户是如何验证到操作密密码。它不考虑用户是如何验证到操作系统的,用户需要完成系统的,用户需要完成SQL Server身份身份验证才允许访问服务器资源。验证才允许访问服务器资源。 使用这种身份验证的主要好处是:使用这种身份验证的主要好处是:SQL Server可以验证任何登录者而不管可以验证任何登录者而不管它们是如何登录到它们是如何登录到Windows网络的。当网络的。当没 有 身 份 验 证 这 个 选 项 时 , 如 与 非没 有 身 份 验 证 这 个 选 项 时 , 如 与 非Windows客户端工作时,这种验证是较客户端工作时,这种验证是较好的方法。但这种方法的安全性没有另一好的方法。但这种方法的安全性没有另一种方法好,因为它给予任何拥有种方法好,因为它给予任何拥有SQL Server密码的用户访问权,而不考虑其密码的用户访问权,而不考虑其Windows身份。身份。 (2) Windows身份验证模式 这种验证方法依赖Windows来完成所有的工作。Windows完成验证,SQL Server信任这个验证并且向Windows账户提供配置的访问。Windows用户和组账户可以映射到SQL Server,允许在Windows层管理所有的验证。这一技术也称为集成安全性或信任安全性。 一般来说,这种方法比SQL Server身份验证要更安全,因为DBA可以将SQL Server配置为不识别任何未经Windows身份验证的映射的账户。因此,SQL Server访问与Windows登录验证不是独立的。它也提供单一登录(Single Sign On,SSO)支持并与所有Windows验证模式集成,包括通过活动目录的Kerberos身份验证。 DBA可以通过以下两种方式来配置验证模式: (1) 混合安全:既可以是SQL Server登录,也可以是Windows集成身份登录。 (2) 仅Windows:SQL Server不允许非Windows身份验证。2. 理解架构理解架构 SQL Server架构是数据库中的逻辑名称空间。DBA可以使用架构来组织数据库存储的大量对象和赋予这些对象的权限。架构是安全对象的集合,其本身也是一个安全对象。 当数据库开发人员创建一个对象(如表或过程),这个对象就关联到一个数据库架构。默认情况下,每个数据库包含一个dbo架构。必要时,DBA可以创建其他架构。在数据库应用中,架构提供三种功能。(1)组织(2)分解(3)权限层次 如果是对整个架构为用户授权。结果是只有一条grant语句,而不是10条。另外,如果以后向架构中添加更多的表,就不需要应用其他的权限。向架构中添加的新表将自动为用户赋予权限,因为权限已经定义在架构级。 必须首先在数据库中创建架构,然后才能向这些架构分配用户或对象。为此,可以使用两种不同的方法:通过SSMS和使用Transact-SQL。要在SSMS中创建架构,执行下列步骤:1)打开SSMS并连接到要求的服务器实例。2)打开“数据库”文件夹,然后打开要新建架构的数据库的文件夹。3)打开“安全性”文件夹和“架构”子文件夹,以显示架构列表。列表中应该有dbo和sys等架构。4)右击“架构”文件夹,从快捷菜单中选择“新建架构”。结果对话框会提供一个文本框,可以用这个文本框来命名架构和提供架构的所有者。本章将在后面讨论架构所有权。5)单击“确定”按钮来创建架构。 也可以使用Transact-SQL代码来创建架构。例如,要创建一个demo架构,由dbo用户所有,可以使用下面的语句。 CREATE SCHEMA demo AUTHORIZATION dbo;3. 主体主体 “主体(Principal)”是可以请求SQL Server资源的实体(entity)-Principals are entities that can request SQL Server resources。与SQL Server授权模型(authorization model)的其他组件一样,主体也可以按层次结构排列。主体的影响范围取决于主体的定义范围(Windows、服务器或数据库)以及主体是否不可分或是一个集合。例如,Windows登录名就是一个不可分主体,而Windows组则是一个集合主体。每个主体都具有一个安全标识符(SID)。(1)Windows级的主体(2)SQL Server级的主体(3)数据库级的主体(4)特殊主体4. SQL Server安全对象安全对象(1) 服务器(server)作用范围安全对象 一些安全对象存在于服务器作用范围。这些安全对象的权限只能赋予服务器级主体。这一安全对象作用范围包含下面的对象。端点(Endpoint)登录名(Login)服务器角色(Server role)数据库(Database) (2) 数据库(database)作用范围安全对象 数据库作用范围的安全对象是应用到数据库总体安全性的对象,它包括以下几个对象。用户(User)数据库角色(Database Role)应用程序角色(Application Role)程序集(Assembly)消息类型(Message Type)路由(Route)服务(Service)远程服务绑定(Remote Service Binding)全文目录(Fulltext Catalog)证书(Certificate)非对称密钥(Asymmetric Key)对称密钥(Symmetric Key)约定(Contract)架构(Schema)4. SQL Server安全对象安全对象4. SQL Server安全对象安全对象(3) 架构作用范围安全对象 架构作用范围安全对象表示服务器应用程序的基本构件块,它包含以下几个安全对象。类型(Type)XML架构集合(XML Schema Collection)对象(Object)对象类包含以下成员:聚合(Aggregate)、函数(Function)、过程(Procedure)、队列(Queue)、统计信息、同义词(Synonym)、表(Table)和视图(View) SQL Server安全对象的层次如图12-6所示。 服务器对象 端点 登录名 服务器角色 数据库 用户 数据库角色 应用程序角色 程序集 消息类型 路由 服务 远程服务绑定 全文目录 证书 非对称密钥 约定 架构 类型 XML架构集合 对象 聚合 约束 函数 过程 队列 统计信息 同义词 表 视图 图12-6 安全对象与架构的关系5. 权限权限 权限表示主体和安全对象之间的关系。权限表示主体和安全对象之间的关系。M S D N 关 于关 于 “ 权 限权 限 ” 的 英 文 解 释 是 :的 英 文 解 释 是 :Permissions (Database Engine) provides information about the permissions that can be assigned to principals on securables,这有助于我们,这有助于我们更好地理解权限的定义。更好地理解权限的定义。权 限描 述应用的安全对象SELECT对安全对象执行SELECT查询同义词、表、视图、表值函数INSERT对安全对象执行INSERT查询同义词、表、视图UPDATE对安全对象执行UPDATE查询同义词、表、视图DELETE对安全对象执行DELETE查询同义词、表、视图EXECUTE执行程序对象过程、标量和聚合函数、同义词CONTROL提供对象的所有可用权限过程、所有函数、表、视图、同义词TAKE OWNERSHIP如果需要则获取所有对象的所有权过程、所有函数、表、视图、同义词CREATE创建对象过程、所有函数、表、视图、同义词ALTER修改对象过程、所有函数、表、视图、同义词6. 权限层次结构(数据库引擎)权限层次结构(数据库引擎)图12-7 数据库引擎权限层次结构之间的关系12.1.3 SQL Server 2016安全机安全机制的总体策略制的总体策略 在在SQL Server 2016中,数据的安中,数据的安全保护由全保护由4个层次构成,如图个层次构成,如图12-8所示。所示。SQL Server 2016主要对其中的主要对其中的3个层次个层次提供安全控制。下面分别对每个层次进行介提供安全控制。下面分别对每个层次进行介绍。绍。图12-8 SQL Server 2016的安全层次结构示意图 (1) 远程网络主机通过远程网络主机通过Internet访问访问SQL Server 2016服务器所在的网络,服务器所在的网络,这一层次由网络环境提供某种保护机制。这一层次由网络环境提供某种保护机制。 (2) 网络中的主机若要访问网络中的主机若要访问SQL Server 2016服务器,首先需要对服务器,首先需要对SQL Server进行正确的配置,其内容将在下一进行正确的配置,其内容将在下一节介绍;其次是需要拥有对节介绍;其次是需要拥有对SQL Server 2016实例的访问权实例的访问权(登录名登录名),其内容将在,其内容将在12.2.1小节介绍。小节介绍。 (3) 若要访问若要访问SQL Server 2016数数据库,这需要拥有对据库,这需要拥有对SQL Server 2016数据库的访问权数据库的访问权(数据库用户数据库用户),其内容将,其内容将在在12.2.2小节介绍。小节介绍。 (4) 若要访问若要访问SQL Server 2016数数据库中的表和列,需要拥有对表和列的访据库中的表和列,需要拥有对表和列的访问权问权(权限权限),其内容将在,其内容将在12.5节介绍。节介绍。 为了对登录和数据库用户进行管理,为了对登录和数据库用户进行管理,SQL Server提供了角色的概念,提供了角色的概念,12.3节节将介绍对固定服务器角色、数据库角色和将介绍对固定服务器角色、数据库角色和应用程序角色的管理。应用程序角色的管理。 SQL Server 2016实现了实现了ANSI中有中有关架构的概念,一个数据库对象通过由关架构的概念,一个数据库对象通过由4个个命名部分组成的结构来引用:命名部分组成的结构来引用:.,其内容将在,其内容将在12.4节介绍。节介绍。12.2 管理用户管理用户11.2.1 管理对管理对SQL Server实例的访问实例的访问 针对SQL Server实例访问,SQL Server 2016支持两种身份验证模式:Windows身份验证模式和混合身份验证模式。在Windows身份验证模式下,SQL Server依靠操作系统来认证请求SQL Server实例的用户。由于已经通过了Windows的认证,因此用户不需要在连接字符串中提供任何认证信息。在混合身份验证模式下,用户既可以使用Windows身份验证模式,也可以使用SQL Server身份验证模式来连接SQL Server。在后一种情况下,SQL Server根据现有的SQL Server登录名来验证用户的凭据。使用SQL Server身份验证需要用户在连接字符串中提供连接SQL Server 的用户名和密码。1. 设置设置SQL Server服务器身份验证模式服务器身份验证模式 可以通过如下步骤在可以通过如下步骤在SQL Server Management Studio中设置身份验证模中设置身份验证模式。式。 (1) 在在“开始开始”菜单中选择菜单中选择“所有程序所有程序”| Microsoft SQL Server 2016 | SQL Server Management Studio命令,打命令,打开开“连接到服务器连接到服务器”对话框,如图对话框,如图12-9所示。所示。 (2) 在在“连接到服务器连接到服务器”对话框中,将对话框中,将“身身份验证份验证”设置为设置为“Windows身份验证身份验证”,单击,单击“连接连接”按钮,即可连接到服务器,如图按钮,即可连接到服务器,如图12-10所示。所示。图12-9 “连接到服务器”对话框图12-10 连接到服务器 (3) 在在“对象资源管理器对象资源管理器”中,右击中,右击SQL Server实例名,从弹出的快捷菜单中选择实例名,从弹出的快捷菜单中选择“属性属性”命令,打开命令,打开“服务器属性服务器属性”对话框,如对话框,如图图12-11所示。所示。图12-11 “服务器属性”对话框 (4) 在左边的在左边的“选择页选择页”列表中,选择列表中,选择“安安全性全性”选项,打开选项,打开“安全性安全性”选项页,如图选项页,如图12-12所示。所示。 (5) 在在“服务器身份验证服务器身份验证”选项区域中设选项区域中设置身份验证模式,如图置身份验证模式,如图12-12所示。更改身所示。更改身份验证模式后,需要重新启动份验证模式后,需要重新启动SQL Server实例才能使其生效。实例才能使其生效。图12-12 在“服务器身份验证”选项区域中设置身份验证模式2. 授权授权Windows用户及组连接到用户及组连接到SQL Server实例实例 为Windows用户或者Windows组创建登录名,以允许这些用户连接到SQL Server。默认情况下,只有本地Windows系统管理员组的成员和启动SQL服务的帐户才能访问SQL Server。 注意,可以删除本地系统管理员组对SQL Server的访问权限。 可以通过指令或者通过SQL Server Management Studio来创建登录名,以便授权用户对SQL Server实例的访问。下面的代码将授权Windows域用户ADMINMAINMaryLogin对SQL Server实例的访问: CREATE LOGIN ADMINMAINMaryLogin FROM WINDOWS;3. 授权授权SQL Server登录名登录名 在混合身份验证模式下,可以创建并在混合身份验证模式下,可以创建并管理管理SQL Server登录名。登录名。 创建创建SQL Server登录名时,要为登登录名时,要为登录名设置一个密码。当用户连接到录名设置一个密码。当用户连接到SQL Server实例时必须提供密码。创建实例时必须提供密码。创建SQL Server登录名时,可以为其指定一个默登录名时,可以为其指定一个默认的数据库和一种默认语言。当应用程序认的数据库和一种默认语言。当应用程序连接到连接到SQL Server但没有指定连接到哪但没有指定连接到哪个数据库时,个数据库时,SQL Server将为这个连接将为这个连接使用登录名的默认属性。使用登录名的默认属性。 SQL Server 2016使用自签名的认使用自签名的认证方式来加密登录时的网络通信包,以避证方式来加密登录时的网络通信包,以避免对登录信息的非授权访问。然而,一旦免对登录信息的非授权访问。然而,一旦登录过程结束,并且登录被确认,登录过程结束,并且登录被确认,SQL Server就将以明文的形式发送后续的所就将以明文的形式发送后续的所有信息。可以通过有信息。可以通过Secure Sockets Layer(SSL)和和Internet Pro两种途径两种途径来实现安全而机密的网络通信。来实现安全而机密的网络通信。 可以通过指令或者可以通过指令或者SQL Server Management Studio来创建来创建SQL Server登录名,以便授权用户访问登录名,以便授权用户访问SQL Server 实例。具体操作如下:实例。具体操作如下: (1) 创建本地用户账户。启动计算机,创建本地用户账户。启动计算机,以以Administrator身份登录到身份登录到Windows系统,然后右击系统,然后右击“计算机计算机”,从弹出的快捷菜,从弹出的快捷菜单中选择单中选择“管理管理”命令,将出现命令,将出现“计算机管理计算机管理”控制台,如图控制台,如图12-13所示。所示。 图12-13 “计算机管理”控制台 (2) 在“计算机管理”控制台中,展开“本地用户和组”,并选择“用户”节点,将出现系统中现有的用户信息。右击“用户”或在右侧的用户信息窗口的空白位置右击,从弹出的快捷菜单中选择“新用户”命令,将弹出“创建新用户”对话框。 可根据实际情况在该对话框中设置创建新用户的选项。用户名:用户登录时使用的账户名,例如“tom”。全名:用户的全名,属于辅助性的描述信息,不影响系统的功能。描述:对于所建用户账户的描述,方便管理员识别用户,不影响系统的功能。密码和确认密码:用户账户登录时需要使用的密码。用户下次登录时须更改密码:如果选中该复选框,用户在使用新账户首次登录时,将被提示更改密码;如果采用默认设置,则选中此复选框;如果不选中该复选框,“用户不能更改密码”和“密码永不过期”这两个选项将被激活。 (3) 单击单击“创建创建”按钮,成功创建后又按钮,成功创建后又将返回创建新用户的对话框。单击将返回创建新用户的对话框。单击“关闭关闭”按按钮,关闭该对话框,然后在钮,关闭该对话框,然后在“计算机管理计算机管理”控控制台中将能够看到新创建的用户账户,如图制台中将能够看到新创建的用户账户,如图12-14所示。所示。图12-14 新创建的用户账户 ( 4 ) 打 开打 开SQL Server Management Studio并连接并连接到目标服务器,到目标服务器,在在“对象资源管理对象资源管理器器”窗口中展开窗口中展开“安全性安全性”节点,节点,右击右击“登录名登录名”,从弹出的快捷菜从弹出的快捷菜单中选择单中选择“新建登新建登录名录名”命令,如图命令,如图12-15所示。所示。 (5) 在在“登录登录名名 - 新建新建”对话对话框的框的“常规常规”选项选项卡中,在卡中,在“登录名登录名”文本框中输入用文本框中输入用户的名称户的名称(已在已在“计算机管理计算机管理”中中创 建 的 用 户 或创 建 的 用 户 或组组),也可以单,也可以单击击“搜索搜索”按钮打按钮打开开“选择用户或组选择用户或组”对话框。对话框。 图12-15 利用“对象资源管理器”创建登录名v在在“选择此对象类型选择此对象类型”区域,单击区域,单击“对象类型对象类型”按钮,打开按钮,打开“对象类型对象类型”对话框,并选择以下对话框,并选择以下的任意或全部选项:的任意或全部选项:“内置安全主体内置安全主体”“组组”和和“用户用户”。 默认情况下,将选中默认情况下,将选中“内置安全主内置安全主体体”和和“用户用户”。 完成后单击完成后单击“确定确定”按钮。按钮。 v在在“从此位置从此位置”区域,单击区域,单击“位置位置”按钮,打开按钮,打开“位置位置”对话框,并选择一个可用的服务器位对话框,并选择一个可用的服务器位置。完成后单击置。完成后单击“确定确定”按钮。按钮。 v在在“输入要选择的对象名称输入要选择的对象名称(示例示例)”文本框中文本框中输入要查找的用户或组名。输入要查找的用户或组名。v单击单击“高级高级”按钮,可以显示更多高级搜索选按钮,可以显示更多高级搜索选项。单击项。单击“立即查找立即查找”按钮,查找想要的用户按钮,查找想要的用户或组名,找到后单击或组名,找到后单击“确定确定”按钮,会返回图按钮,会返回图12-16。图12-16 “登录名-新建”对话框 (6) 单击单击“确定确定”按钮,完成登录名的创按钮,完成登录名的创建,如图建,如图12-17所示。所示。图12-17 创建的登录名 也可以使用Transact-SQL语句创建SQL Server登录名。创建SQL Server登录名 【例12-1】创建一个名为jack的SQL Server登录名,并指定该登录名的默认数据库为“教学管理”。 CREATE LOGIN jack WITH PASSWORD = 56wer$, DEFAULT_DATABASE =教学管理修改登录账号 【例12-2】修改登录账号的名称。 ALTER LOGIN jack WITH NAME=jacky删除登录账号 【例12-3】删除SQL Server登录账号“jack”。 DROP LOGIN jack SQL Server 2016在安装过程中在安装过程中创建了一个创建了一个SQL Server 登录名登录名sa。sa登录名始终都会创建,即使安装时选择的登录名始终都会创建,即使安装时选择的是是Windows身份验证模式。虽然不能身份验证模式。虽然不能删除删除sa登录名,但可以通过改名或者禁登录名,但可以通过改名或者禁用的方式避免用户通过该账户对用的方式避免用户通过该账户对SQL Server进行非授权访问。进行非授权访问。 【例【例12-4】运行如下】运行如下Transact-SQL语句,通过语句,通过sql_logins目录视图来目录视图来获取有关获取有关SQL Server登录名的信息。登录名的信息。 SELECT SELECT * * FROM sys.sql_logins;FROM sys.sql_logins; 【例【例12-5】创建登录名】创建登录名Marylogin,并授,并授予其创建和执行予其创建和执行SQL Server Profiler跟踪跟踪的权限。的权限。Transact-SQL代码如下:代码如下:CREATE LOGIN Marylogin-CREATE LOGIN Marylogin-创建一个名为创建一个名为MaryloginMarylogin的的SQL ServerSQL Server登录名登录名WITH PASSWORD = 674an7$52,WITH PASSWORD = 674an7$52,DEFAULT_DATABASE =DEFAULT_DATABASE =教学管理教学管理; ;-授予登录名授予登录名MaryloginMarylogin创建和执行创建和执行SQL Server SQL Server ProfilerProfiler跟踪的权限跟踪的权限GRANT ALTER TRACE TO Marylogin;GRANT ALTER TRACE TO Marylogin;用户可以通过用户可以通过fn_my_permissions函数来函数来了解自己的权限。了解自己的权限。【例【例12-6】使用】使用fn_my_permissions函函数显示用户的权限。数显示用户的权限。代码如下:代码如下:SELECT SELECT * * FROM fn_my_permissions(NULL, FROM fn_my_permissions(NULL, SERVER);SERVER);4. 连接到连接到SQL Server (1) 通过通过Windows身份验证进行连接身份验证进行连接 当用户通过当用户通过Windows身份验证连接时,身份验证连接时,SQL Server使用操作系统中的使用操作系统中的Windows主体标记来验证账户名和密码。也就是说,主体标记来验证账户名和密码。也就是说,用户身份由用户身份由Windows进行确认。进行确认。SQL Server不要求提供密码,也不执行身份验证。不要求提供密码,也不执行身份验证。Windows身份验证是默认的身份验证模式,身份验证是默认的身份验证模式,并且比并且比SQL Server身份验证更安全。身份验证更安全。Windows身份验证使用身份验证使用Kerberos安全协安全协议,提供有关强密码复杂性验证的密码策略,议,提供有关强密码复杂性验证的密码策略,还提供账户锁定支持,并且支持密码过期。还提供账户锁定支持,并且支持密码过期。通过通过Windows身份验证完成的连接有时也身份验证完成的连接有时也称为可信连接,这是因为称为可信连接,这是因为SQL Server信任信任由由Windows提供的凭据。因此,建议尽可提供的凭据。因此,建议尽可能使用能使用Windows身份验证。身份验证。 (2) 通过通过SQL Server身份验证进行连身份验证进行连接接 当使用当使用SQL Server身份验证时,在身份验证时,在SQL Server中创建的登录名并不基于中创建的登录名并不基于Windows用户账户。用户名和密码均通过用户账户。用户名和密码均通过SQL Server创建并存储在创建并存储在SQL Server中。中。通过通过SQL Server身份验证进行连接的用户身份验证进行连接的用户每次连接时必须提供其凭据每次连接时必须提供其凭据(登录名和密码登录名和密码)。当使用当使用SQL Server 身份验证时,必须为所身份验证时,必须为所有有 SQL Server账户设置强密码。账户设置强密码。 可供SQL Server登录名选择使用的密码策略有以下3种。用户在下次登录时必须更改密码 要求用户在下次连接时更改密码。更改密码的功能由SQL Server Management Studio提供。如果使用该选项,则第三方软件开发人员应提供此功能。强制密码过期 对SQL Server登录名强制实施计算机的密码最长使用期限策略。强制实施密码策略 对SQL Server登录名强制实施计算机的Windows密码策略,包括密码长度和密码复杂性。此功能需要通过NetValidatePasswordPolicy API实现,该API只在Windows Server 2003和更高版本中提供。5. 确定本地计算机的密码策略确定本地计算机的密码策略 确定本地计算机的密码策略的操作步骤确定本地计算机的密码策略的操作步骤如下:如下: (1) 在在“开始开始”菜单上,单击菜单上,单击“运行运行”命令。命令。 ( 2 ) 在在 “ 运 行运 行 ” 对 话 框 中 , 输 入对 话 框 中 , 输 入secpol.msc,然后单击,然后单击“确定确定”按钮。按钮。 (3) 在打开的在打开的“本地安全策略本地安全策略”窗口中,窗口中,依次展开依次展开“安全设置安全设置”|“账户策略账户策略”,然后单,然后单击击“密码策略密码策略”。 (4) 在此,可以设置密码策略,如图在此,可以设置密码策略,如图12-18所示。所示。图12-18 密码策略6. SQL Server身份验证模式的优缺点身份验证模式的优缺点 (1) SQL Server身份验证的缺点如果用户是具有Windows登录名和密码的Windows域用户,还必须提供另一个用于连接的(SQL Server)登录名和密码。用户不得不记住多个登录名和密码。每次连接到数据库时都必须提供SQL Server凭据也十分烦人。SQL Server身份验证无法使用Kerberos安全协议。SQL Server登录名不能使用Windows提供的其他密码策略。(2) SQL Server身份验证的优点允许SQL Server支持那些需要进行SQL Server身份验证的旧版应用程序和由第三方提供的应用程序。允许SQL Server支持具有混合操作系统的环境,在这种环境中,并不是所有用户都由Windows域进行验证。允许用户从未知的或不可信的域进行连接。例如,客户使用指定的SQL Server登录名进行连接以接收其订单状态的应用程序。允许SQL Server支持基于Web的应用程序,在这些应用程序中,用户可以创建自己的标识。允许软件开发人员使用基于已知的预设SQL Server登录名的复杂权限层次结构来分发应用程序。7. 实施密码策略实施密码策略 SQL Server 2016能够对SQL Server登录名执行操作系统的密码实施策略。如果在Windows 2003服务器版上运行SQL Server,SQL Server将使用NetValidatePasswordPolicy API(应用程序接口)来控制如下3点:密码的复杂性密码的生存周期账户锁定 如果在Windows 2000服务器版上运行SQL Server,SQL Server会使用Microsoft Baseline Security Analyzer(MBSA)提供的本地密码复杂性规则来执行如下密码规则:密码不能为空或者NULL密码不能为登录名密码不能为机器名密码不能为Password、Admin或者Administrator 【例12-7】可以使用如下Transact-SQL语句打开密码实施策略。 CREATE LOGIN Marylogin WITH PASSWORD = 674an7$52 MUST_CHANGE, CHECK_EXPIRATION = ON, CHECK_POLICY = ON;8. 拒绝用户访问拒绝用户访问 在某些情况下,例如,某用户离开了组在某些情况下,例如,某用户离开了组织,此时可能需要拒绝一个特定的登录名对织,此时可能需要拒绝一个特定的登录名对数据库的访问。如果这个拒绝是临时的,可数据库的访问。如果这个拒绝是临时的,可以通过禁用该登录名来完成,并不需要将该以通过禁用该登录名来完成,并不需要将该登录名从实例中删除。通过禁用访问,为数登录名从实例中删除。通过禁用访问,为数据库用户保留了登录名属性及其与数据库用据库用户保留了登录名属性及其与数据库用户之间的映射关系。重新启用登录名时,可户之间的映射关系。重新启用登录名时,可以像以前一样使用同样的登录名属性。以像以前一样使用同样的登录名属性。 【例【例12-8】执行如下】执行如下ALTER语句可以启语句可以启用或禁用登录名用或禁用登录名Marylogin。- - 禁用登录名禁用登录名ALTER LOGIN Marylogin DISABLE;ALTER LOGIN Marylogin DISABLE;- - 启用登录名启用登录名ALTER LOGIN Marylogin ENABLE;ALTER LOGIN Marylogin ENABLE;可以通过查询可以通过查询sql_loginssql_logins目录视图来检查被目录视图来检查被禁用的登录名,禁用的登录名,Transact-SQLTransact-SQL语句如下:语句如下:- - 查询系统目录视图查询系统目录视图SELECT SELECT * * FROM sys.sql_logins FROM sys.sql_loginsWHERE is_disabled=1;WHERE is_disabled=1; 在在SQL Server Management Studio中,被禁用的登录名有一个红色的中,被禁用的登录名有一个红色的箭头作为标记。该箭头显示在登录名的图标箭头作为标记。该箭头显示在登录名的图标中。用户可以在中。用户可以在“对象资源管理器对象资源管理器”窗口中的窗口中的“安全性安全性”|“登录名登录名”中看到。中看到。 如果需要从实例中删除一个登录名,可如果需要从实例中删除一个登录名,可以使用以使用DROP LOGIN语句。语句。 【例【例12-9】如下语句将删除登录名】如下语句将删除登录名Marylogin。 DROP LOGIN Marylogin; DROP LOGIN Marylogin; 注意:删除登录名时,注意:删除登录名时,SQL Server 2016不会删除与其映射的数据库用户。另不会删除与其映射的数据库用户。另外,删除与外,删除与Windows用户或组映射的登录用户或组映射的登录名并不能保证该用户或者该组的成员不能访名并不能保证该用户或者该组的成员不能访问问SQL Server,该用户可能仍然属于有合,该用户可能仍然属于有合法登录名的其他法登录名的其他Windows组。组。12.2 管理用户管理用户12.