第12章SQLServer的安全管理第十一章SQLServer的安全管理本章主要学习内容SQLServer安全体系结构SQLServer的验证模式账号和角色SQL数据库系统与应用----课堂讲义12.1SQLServer安全体系结构SQLServer的安全体系结构可以划分为以下4个等级:•客户机操作系统的安全性•SQLServer的登录安全性•数据库的使用安全性•数据库对象的使用安全性12.1.1操作系统的安全性操作系统安全性是操作系统管理员或者网络管理员的任务。由于SQLServer采用了集成WindowsNT网络安全性的机制,所以使得操作系统安全性的地位得到提高,但同时也加大了管理数据库系统安全性和灵活性的难度。用户操作系统安全SQLServer验证数据库数据库访问权限数据库对象数据库对象访问权限客户机服务器SQLServer的安全等级12.1SQLServer安全体系结构12.1.2SQLServer的安全性SQLServer的服务器级安全性建立在控制服务器登录账号和密码的基础上。SQLServer采用了标准SQLServer登录和集成WindowsNT登录两种方式。12.1.3数据库的安全性对任何用户来说,master数据库的门总是打开的。但是由于master数据库存储了大量的系统信息,所以建议用户在建立新的登录账号时,不要将默认的数据库设置为master数据库。12.1.4SQLServer数据库对象的安全性默认情况下,只有数据库的拥有者可以在该数据库下进行操作。当一个非数据库拥有者想访问数据库里的对象时,必须事先由数据库拥有者赋予用户对指定对象执行特定操作的权限。12.2SQLServer的验证模式SQLServer对用户的访问进行两个阶段的检验:•验证阶段(Authentication)•许可确认阶段(PermissionValidation)12.2.1NT验证模式NT验证模式有以下主要优点:•数据库管理员的工作可以集中在管理数据库之上,而不是管理用户账户。对用户账户的管理可以交给WindowsNT/2000去完成。•WindowsNT/2000有着更强的用户账户管理工具。可以设置账户锁定、密码期限等。如果不是通过定制来扩展SQLServer,SQLServer是不具备这些功能的。•WindowsNT/2000的组策略支持多个用户同时被授权访问SQLServer。12.2.2混合验证模式混合验证模式具有如下优点:•创建了WindowsNT/2000之外的另外一个安全层次。12.2SQLServer的验证模式•支持更大范围的用户,例如非WindowsNT客户、Novell网络等。•一个应用程序可以使用单个的SQLServer登录或口令。12.2.3NT验证模式对SQLServer的影响在注册表中,我的电脑\KHEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer中的LoginMode的值决定了采用哪种验证模式。如果该键值为0,则采用混合验证模式,如果该值不为0,则采用NT验证模式,如图所示。每次启动SQLServer时,都将检查该键的值,以决定使用哪种验证模式。12.2SQLServer的验证模式12.2.4设置验证模式操作步骤如下:(1)打开企业管理器,选择服务器组中的服务器,右击鼠标,选择“编辑SQLServer注册属性”命令,打开“已注册的SQLServer属性”对话框,如图所示。如果选中“使用SQLServer身份验证”模式,则须输入登录名和密码。(2)在对话框中设置验证模式后,单击“确定”按钮即可。12.2SQLServer的验证模式(3)还可以通过设置服务器的属性来设置验证模式。在服务器上右击鼠标,在弹出的菜单中选择“属性”命令,打开“属性”对话框。(4)单击“安全性”标签,打开“安全性”选项卡,如图所示。在此选项卡中也可以设置验证模式。如果选中“SQLServer和Windows”表示选择混合验证模式,如果选中“仅Windows”表示选择NT验证模式。12.3账号和角色在SQLServer中,账号有两种,一种是登录服务器的登录账号(loginname),另外一种是使用数据库的用户账号(username)。12.3.1服务器的登录账号打开企业管理器,展开服务器组和服务器。展开“安全性”文件夹,选择“登录”选项,即可看到系统创建的默认登录账号,如图所示。12.3账号和角色创建一个登录账号的操作步骤如下:(1)在“登录”选项上面右击鼠标,选择“新建登录”命令,打开登录属性对话框,如右上图所示。(2)在“名称”文本框中输入“licb”,在“身份验证”选项组中,选择“SQLServer身份验证”单选按钮,并输入密码。然后在“默认设置”选项组中,选择“数据库”列表框中的“school”数据库,表示该登录账号默认登录到school数据库中。(3)单击“服务器角色”标签,打开“服务器角色”选项卡,如右下图所示。在此选项卡中,可以设置登录账号所属的服务器角色。12.3账号和角色(4)单击“数据库访问”标签,打开“数据库访问”选项卡,如右上图所示。在此可选择登录账号可以访问的数据库。(5)设置完成后,单击“确定”按钮,出现如右下图所示的“确认密码”对话框,再次输入密码,即可创建一个名称为licb的登录账号。12.3账号和角色12.3.2数据库的用户下面在test数据库中创建一个用户账号,并将其关联到licb登录账号中。操作步骤如下:(1)在企业管理器中,展开SQLServer组及其服务器,在“数据库”文件夹中,展开test文件夹,然后在“用户”选项上右击鼠标,选择“新建数据库用户”命令,打开新建用户对话框。(2)单击“登录名”下拉按钮,选择licb登录账号,此时“用户名”文本框中自动显示为licb,如图所示。(3)设置完成后,单击“确定”按钮,即可在test数据库中创建一个新的用户账号。如果不想创建用户账号,单击“取消”按钮即可。在“登录名”文本框后面的“权限”按钮是灰色的,表示不能在创建用户账号时设置其权限。但是可以在创建后通过其属性对话框来设置其权限,操作步骤如下:12.3账号和角色(1)在要设置权限的用户上面右击鼠标,然后选择“属性”命令,打开“数据库用户属性”对话框,如图所示。(2)在“数据库用户属性”对话框中,单击“权限”按钮,打开权限设置对话框,如图所示。在此可以设置用户对数据库对象所具有的权限。(3)如果要设置对表或者视图的某一字段进行操作的权限,可在列表中选择表或者视图,然后单击“列”按钮,可打开“列权限”对话框。使用该对话框即可进行相应权限的设置。12.3账号和角色12.3.3数据库角色在SQLServer中,数据库角色可分为两种:•标准角色•应用程序角色1.标准角色展开school数据库,然后选择“角色”选项,即可看到其中默认的10个固定角色,如图所示。下面以db_owner数据库角色为例,来查看它的属性,并将用户licb加入到该角色中。操作步骤如下:(1)在数据库school文件夹下,选择“角色”选项。12.3账号和角色(2)在db_owner角色上右击鼠标,然后选择“属性”命令,打开“数据库角色属性-db_owner”对话框,如右下图所示。(3)要将用户licb加入到该角色中,可单击“添加”按钮,打开“添加角色成员”对话框,如左下图所示。选择要加入的用户,如果没有建立用户或者其他数据库角色,则此对话框不会出现。(4)依次单击“确定”按钮,即可将用户licb加入到db_owner数据库角色中。12.3账号和角色建立一个数据库标准角色的操作步骤如下:(1)在要创建角色的数据库文件夹下,在“角色”上右击鼠标,然后选择“新建数据库角色”命令,打开“数据库角色属性-新建角色”对话框,如图所示,新建数据库角色的名称为licbRole。(2)设置完成后,单击“确定”按钮即可创建新角色。(3)在第一次创建数据库角色时,不能为其指定权限。但是可在创建完成后,通过其属性对话框来指定权限。在新创建的角色上右击鼠标,打开“数据库角色属性”对话框,单击“权限”按钮,即可打开权限设置对话框,如图所示。12.3账号和角色2.应用程序角色应用程序角色和标准角色的区别有如下3点:•应用程序角色不包含成员。•默认情况下,应用程序角色是非活动的,需要用密码激活。•应用程序角色不使用标准权限。创建应用程序角色的操作步骤和创建标准角色的步骤类似,只是要选中“应用程序角色”单选按钮,如图所示。如果要删除角色,则可以直接选取角色,然后按Delete键或者右击鼠标选择“删除”命令。3.public数据库角色的权限双击public角色可以打开其属性对话框,可查看它的属性和权限。但是对于用户建立的数据库对象,例如用户建立的表,public角色默认是不设置权限。12.3账号和角色12.3.4用户和角色的权限问题table1SELECTINSERTpublic的权限没有设置没有设置Role1的权限√没有设置table1SELECTINSERTUser1的权限没有设置√User1的最终权限√√table1SELECTINSERTpublic的权限没有设置没有设置Rolel的权限√User1的权限√Userl的最终权限允许的权限继承拒绝的权限继承