SQLServer的验证模式账户和角色第10章账户和存取权限对于一个数据库管理员来说,安全性就意味着必须保证那些具有特殊数据访问权限的用户能够登录到SQLServer,并且能够访问数据以及对数据库对象实施各种权限范围内的操作;同时,他还要防止所有的非授权用户的非法操作。SQLServer提供了既有效又容易的安全管理模式,这种安全管理模式是建立在安全身份验证和访问许可两者机制上的。基本原理主体:它是一个标识,用来访问SQL服务器的对象,可能是用户或应用程序。安全对象:在服务器和数据库中,可通过权限保护的对象。权限:用来规定特定主体在访问安全对象时允许或不允许的行为。安全级别:SQLServer具有多个安全级别,各级别间具有层次关系。登录名:通过登录名可以连接到服务器。用户:通过用户可以访问数据库。角色:通过角色可以赋予访问数据库的权限。重要概念主体主体Server角色SQLServer登录Windows组域用户账户本地用户账户用户数据库角色应用程序角色组SQLServer数据库Windows安全对象权限安全对象主体Server角色SQLServer登录Windows组域用户账户本地用户账户用户数据库角色应用程序角色组SQLServer数据库Windows安全对象权限文件密钥服务器架构数据库SQLServer2005权限主体Server角色SQLServer登录Windows组域用户账户本地用户账户用户数据库角色应用程序角色组SQLServer数据库Windows安全对象权限文件密钥服务器架构数据库CREATEALTERDROPCONTROLCONNECTSELECTEXECUTEUPDATEDELETEINSERTTAKEOWNERSHIPVIEWDEFINITIONBACKUP授予/撤销/拒绝ACL10.1SQLServer的验证模式SQLServer对用户的访问进行两个阶段的检验:验证阶段登录SQLServer时进行的检查。如果验证通过,用户就可以连接到SQLServer上;否则,服务器将拒绝用户的登录。从而保证了系统安全性。许可确认阶段登录到SQLServer上以后,系统检查用户是否有访问服务器上数据的权限。10.1.1Windows模式验证在windows验证模式下,SQLServer检测当前使用的Windows用户帐户,确定该账户是否有权限登录。该模式不必提交登录名和密码。10.1SQLServer的验证模式Windows验证模式有以下主要优点:•数据库管理员的工作可以集中在管理数据库上面,而不是管理用户账户。对用户账户的管理可以交给Windows去完成。•Windows有着更强的用户账户管理工具。可以设置账户锁定、密码期限等。•Windows的组策略支持多个用户同时被授权访问SQLServer。10.1SQLServer的验证模式10.1.2混合验证模式混合验证模式允许以SQLServer验证模式或Windows验证模式来进行验证。使用哪种模式取决于在最初的通信时使用的网络库。如果一个用户使用的是TCP/IPSockets进行登录验证,则将使用SQLServer验证模式;如果用户使用NamedPipes,则登录时将使用Windows验证模式。SQLServer验证模式处理登录的过程:用户输入登录名和密码后,SQLServer在系统注册表中检测输入的登录名和密码。如果输入的登录名存在,而且密码也正确,就可以登录到SQLServer上。10.1SQLServer的验证模式混合验证模式具有如下优点:•创建了Windows之上的另外一个安全层次。•支持更大范围的用户,例如非Windows客户、Novell网络等。•一个应用程序可以使用单个的SQLServer登录和口令。10.1SQLServer的验证模式10.1.3设置验证模式第1步:在“对象资源管理器”窗口中,选择服务器,右击,在弹出的快捷菜单上选择“属性”命令,然后在打开的“服务器属性”对话框中,选择“安全性”选项,打开“安全性”选项卡.第2步:在“服务器身份验证”栏中设置验证模式后,单击“确定”按钮.第3步:重新启动SQLServer,以新的验证模式登录服务器。10.1SQLServer的验证模式10.2账户和角色SQLServer的两种账户:登录服务器的登录帐户(loginname)•登录帐户只是让用户登录到SQLServer中,但登录名本身并不能让用户访问服务器中的数据。要访问特定的数据库,还必须具有用户名。使用数据库的用户帐户(username)•用户名在特定的数据库内创建。用户定义的信息放在服务器上的每个数据库的sysusers表中。通过授权给用户来指定银行可以访问的数据库对象的权限。角色角色是一组用户所构成的组,可分为服务器角色和数据库角色。当几个用户需要在某个特定的数据库中执行类似的动作时,就可以向该数据库中添加一个角色(role)。数据库角色指定了可以访问相同数据库对象的一组数据库用户。10.2账户和角色服务器角色Sysadmin可执行SQLServer中的任何动作Serveradmin可设置服务器范围的配置选项Setupadmin可管理链接服务器和启动过程Securityadmin可管理登录和创建数据库、读取错误日志和更改密码。Processadmin管理SQLServer进程Dbcreator创建、修改和删除数据库Diskadmin管理磁盘文件Public具有查看任何数据库的权限10.2账户和角色10.2.1登录帐户登录帐户的添加登录帐户的设置登录帐户的删除10.2账户和角色登录帐户的添加1、SQLServer服务器登录管理:创建、管理SQLServer登录帐号,具体执行步骤如下:(1)打开SSMS在【对象资源管理器】中,展开【安全性】文件夹。(2)右击【登录名】,从弹出的快捷菜单中选择【新建登录名】选项,则出现【登录名—新建】对话框,如下图。(3)选择【服务器角色】页框,如图。在框中,列出了系统的固定服务器角色。在这些固定服务器角色的左端有相应的复选框,打勾的复选框表示该登录帐号是相应的服务器角色成员。10.2账户和角色登录帐户的添加(3)选择【服务器角色】页框,如图。在框中,列出了系统的固定服务器角色。在这些固定服务器角色的左端有相应的复选框,打勾的复选框表示该登录帐号是相应的服务器角色成员。10.2账户和角色图10-3服务器角色对话框登录帐户的添加(4)选择【用户映射】页框,如图。上面的列表框列出了【映射到此登录名的用户】,单击左边的复选框设定该登录账号可以访问的数据库以及该帐号在各个数据库中对应的用户名。在【数据库角色成员身份】中可指定该帐号所属的数据库角色。10.2账户和角色图10-4用户映射对话框登录帐户的添加(5)选择【安全对象】页框,如图。安全对象是SQL数据库引擎授权系统控制对其进行访问的资源。点击【添加…】按钮,可对不同类型的安全对象进行安全授予或拒绝;单击【确定】即可完成登录帐号的创建。10.2账户和角色10.2.2数据库用户每个登录帐户在一个数据库中中你能有一个用户帐户,但是每个登录帐户可以在不同的数据库中各有一个用户帐户。如果在创建登录帐户时没有指定对某个数据库的存取权限,则在数据库中,可创建一个新的用户帐户,并关联到该登录帐户,则该登录帐户会自动具有对该数据库的访问权限。例:在AdventureWorks库中创建一个用户帐户bookA,并将其关联到bookadm登录帐户中。10.2账户和角色利用SSMS可授予SQLServer登录访问数据库的许可权限:打开SSMS,展开要登录的服务器和数据库文件夹,展开要创建用户的数据库及安全性文件夹。图10-6新建数据库用户对话框右击用户图标,从快捷菜单中选择【新建用户】选项,则出现【数据库用户—新建】对话框,如图。10.2.3角色拥有相同权限的用户集合称为角色服务器角色:由服务器账户组成的组,负责管理和维护SQLServer组。数据库角色:由数据库成员所组成的组,此成员可以是用户或者其他的数据库角色。10.2账户和角色1.固定数据库角色db_owner在数据库中有全部权限db_accessadmin可以添加、删除用户db_datareader可以查看所有数据库中用户表内数据db_datawriter可以添加、修改或删除所有数据库中用户表内数据的用户db_ddladmin可以在数据库中执行所有定义操作db_securityadmin可以管理数据库中与安全权限有关所有动作db_backoperator可以备份数据库db_denydatareader不能选择数据库中任何数据db_denydatawriter不能改变数据库中任何数据Public10.2账户和角色(1)管理服务器角色。打开SSMS,展开指定的服务器,单击【安全性】文件夹,再单击【服务器角色】,在右边的页框中右击所要的角色,从弹出菜单中选择【属性】,则出现【服务器角色属性】对话框,如图。在该对话框可看到属于该角色的成员。单击【添加】或单击【删除】按钮。图10-16“数据库角色—新建”对话框(2)管理数据库角色。在SSMS中,展开【服务器】、【数据库】和【安全性】文件夹,右击【数据库角色】,从弹出菜单中选择【新建数据库角色】,则出现【新建数据库角色】对话框,如图。图10-16“数据库角色—新建”对话框2.应用程序角色应用程序角色只使用应用程序,因而不需要把权限直接赋予用户,所以应用程序角色没有任何成员。此外需要为应用程序设置一个口令来激活它。应用程序角色可以加强对某个特定的应用程序的安全。这些角色允许应用程序自己代替SQLServer接管用户身份验证的职责。比如,如果公司中的员工只是使用某个特定的应用程序(而不是使用Transact-SQL语句或其他任何工具)来修改员工的数据信息,那么就可以为它创建一个应用程序角色。当应用程序角色被应用程序的会话激活以用于连接时,在连接期间,会话就失去了登录、用户账户或所有数据库中的角色的权限。10.2账户和角色3.public数据库角色的权限public角色是一种特殊的固定数据库角色,当在数据库添加新用户帐户时,SQLServer会自动将新用户帐户加入public数据库角色中,即数据库的每个合法用户都属于该角色。public角色为数据库中的用户提供了所有默认权限。对于用户建立的数据库对象,public角色默认是不设置权限。public角色为数据库中的所有用户都保留了默认的权限,因此是不能被删除的。10.2账户和角色10.2.4用户和角色的权限问题用户是否具有对数据库存取的权利,要看其权限设置而定,但是,它还要受其所属角色的权限的限制。10.2账户和角色1.用户权限继承角色的权限用户对数据库对象的存取权限继承于所属角色。假如用户User1属于角色Role1,角色Role1已经取得对表Table1的SELECT权限,则用户User1也自动取得对表Table1的SELECT权限,如果角色Role1对表Table1没有INSERT权限,而用户User1取得了对表Table1的INSERT权限,则角色Role1最终也取得对表Table1的INSERT权限。拒绝权限优先,只要角色Role1和用户User1中的之一拒绝,则该权限就是拒绝。10.2账户和角色2.用户分属不同角色如果一个用户分属于不同的数据库角色,例如,用户User1即属于角色Role1,又属于角色Role2,则用户User1的权限是以Role1和Role2的并集为准。但是只要有一个拒绝,则用户User1的权限就是拒绝。10.2账户和角色在SSMS中,展开【服务器】、【数据库】和【安全性】,单击【用户】图标,在页框中将显示数据库的所有用户。右击要进行许可设置的【用户】,从弹出菜单中选择【属性】,出现【数据库用户属性】对话框,选择【安全对象】,如图。单击【添加】按钮,则弹出【添加对象】对话框,如左下图所示。选择【特定对象】单选钮后