大型数据库——SQLServer2000程序设计第9章安全管理安全认证模式登录管理数据库用户管理角色权限管理大型数据库——SQLServer2000程序设计三个概念:登录、用户、角色登录帐号:用来和SQLSERVER连接有了登录号才能连接上SQLSERVER,才有使用SQLSERVER的入门资格,但登录帐号没有使用数据库对象的权力数据库用户:简称用户,作为数据库对象,SQLSERVER用它来设定数据库存取的许可权。所以为了要存取SQLSERVER内的某一数据库的数据库对象,每一登录帐号必须对应一个用户名。角色:也称为安全性角色,对数据具有相同的访问权限。包括系统内建角色和自建角色二类角色,其中,系统内建角色又分为服务器角色和数据库角色,数据库角色也是一个数据库对象大型数据库——SQLServer2000程序设计登录、用户的关系1、登录帐号是用来连接SQLSERVER的,但登录帐号没有使用数据库对象的权力,SQLSERVER是以用户名来设定数据库存取的许可权。所以,为了要存取SQLSERVER内某一数据库内的数据库对象,每一登录帐号必须在该数据库对应一个用户名2、用户是数据库对象,定义和修改时必须选择对应的数据库,而登录不是数据库对象,它的定义和修改在SQLSERVER服务器下的安全性里进行。3、用户的定义必须指定对应的登录名,一个登录名可以对应多个用户,但一个登录名在一个数据库内只能有一个用户。4、用户名与数据库相关。sales数据库中的xyz用户帐户不同于inventory数据库中的xyz用户帐户,即使这两个帐户有相同的用户名。用户名由db_owner固定数据库角色成员定义。大型数据库——SQLServer2000程序设计用户、角色的关系1、角色在权限管理方面是一个强有力的工具,是具有相同权限的用户的集合,角色分为系统内建角色和自建角色,同时系统内建角色分为服务器角色和数据库角色,自建角色都是数据库角色。2、服务器角色和登录名相对应;而数据库角色是和用户对应的,数据库角色和用户都是数据库对象,定义和删除的时候必须选择所属的数据库3、一个数据库角色中可以有多个用户,一个用户也可以属于多个数据库角色大型数据库——SQLServer2000程序设计SQLSERVER2000工作时,用户需要经过两个安全性阶段:身份验证、授权(权限验证)9.1.1身份验证又叫认证,是使用SQLSERVER2000的第一道管制关卡,用户必须使用登录帐号和密码来登录SQLSERVER,当登录成功后才拥有使用SQLSERVER的入门资格。但是,即使你通过了第一道认证关卡并不表示你对SQLSERVER内的数据有存取的权限。9.1安全认证模式大型数据库——SQLServer2000程序设计SQLSERVER2000可以通过两种方式来进行身份验证:Windows身份验证、SQLSERVER身份验证。Windows身份验证:由Windows系统确认用户的登录帐号和密码,Windows系统的登录帐号可以直接访问SQLSERVER系统,不必提供SQLSERVER的登录帐号和密码。SQLSERVER身份验证:由Windows系统确认用户的登录帐号和口令。相应的,SQLSERVER2000可以在两种安全模式(身份验证)下工作:Windows身份验证模式:用Windows用户帐号进行连接混合模式:用Windows身份验证或SQLSERVER身份验证与SQLSERVER实例连接。9.1.1身份验证大型数据库——SQLServer2000程序设计9.1.2授权又叫权限验证,数据库中的所有对象的存取权限还必须通过授权(即存取许可)的设定来决定该登录者是否拥有某一对象的存取权限。大型数据库——SQLServer2000程序设计9.2登录管理登录帐号是基于服务器使用的用户名。为了访问SQLServer系统,用户必须提供正确的登录帐号。这些登录帐号既可以是Windows登录帐号,也可以是SQLServer登录帐号。登录帐号的信息是系统级信息,存储在master数据库中的syslogins系统表中。大型数据库——SQLServer2000程序设计增加登录帐号可以有两种方法:使用企业管理器1、选择要建立登录的SQLSERVER服务器2、展开安全性,选择登录使用系统存储过程1、SQLSERVER登录(sp_AddLogin,sp_DropLogin)sp_addlogin‘登陆名’,‘密码’,‘默认数据库’2、WindowsNT用户或组登录(机器名\用户或工作组名)(sp_GrantLogin、sp_DenyLogin、sp_RevokeLogin)格式:sp_GrantLogin‘机器名\用户名’9.2.1创建登录大型数据库——SQLServer2000程序设计9.2.2查看、修改登录查看、修改登录帐号:使用企业管理器1、选择要查看或修改的登录的SQLSERVER服务器2、展开安全性,选择登录3、在详细信息窗格中,右击要查看的登录,然后单击属性。大型数据库——SQLServer2000程序设计9.2.3删除登录使用企业管理器1、选择要删除登录的SQLSERVER服务器2、展开安全性,选择登录3、在详细信息窗格中,右击要查看的登录,单击删除。使用系统存储过程1、SQLSERVER登录(sp_dropLogin)sp_droplogin‘登陆名’,‘密码’,‘默认数据库’2、WindowsNT用户或组登录(机器名\用户或工作组名)(sp_DenyLogin、sp_RevokeLogin)格式:sp_revokeLogin‘机器名\用户名’大型数据库——SQLServer2000程序设计9.3数据库用户管理用户帐号是基于数据库使用的名称,与登录帐号相对应,登录帐号属数据库实例范畴的概念,用户帐号属于特定数据库范畴。一个登录帐号可以使用一个特定的用户帐号或一个默认的用户帐号。用户帐户是由SQLServer管理的,所有的用户帐户都存放在系统表sysusers中。大型数据库——SQLServer2000程序设计9.3.1创建用户帐号创建数据库用户帐号,可以有两种方法:使用企业管理器1、选择要建立用户的SQLSERVER服务器2、展开数据库,选择用户使用系统存储过程sp_AddUser‘登录名’,‘用户名’注:在管理用户的时候必须选择对应的数据库(use要建立用户的数据库名)大型数据库——SQLServer2000程序设计9.3.2删除用户帐号删除数据库用户帐号,可以有两种方法:使用企业管理器1、选择要建立用户的SQLSERVER服务器2、展开数据库,选择用户使用系统存储过程sp_DropUser‘用户名’注:在管理用户的时候必须选择对应的数据库(use要建立用户的数据库名)大型数据库——SQLServer2000程序设计9.4角色角色在权限管理方面是一个强有力的工具,如果用户具有相同的权限,那么我们可以:1、先创建一个角色2、对这个角色赋予权限3、将这些用户添加到该角色中(使它们成为角色中的成员)角色分为系统内建角色和自建角色,同时系统内建角色分为服务器角色和数据库角色(自建角色都是数据库角色)。1、服务器角色和登录名相对应2、数据库角色是和用户对应的3、数据库角色和用户都是数据库对象,定义和删除的时候必须选择所属的数据库大型数据库——SQLServer2000程序设计一、固定服务器角色下表描述固定服务器角色。固定服务器角色描述sysadmin在SQLServer中进行任何活动。该角色的权限跨越所有其它固定服务器角色。serveradmin配置服务器范围的设置。setupadmin添加和删除链接服务器,并执行某些系统存储过程(如sp_serveroption)。securityadmin管理服务器登录。processadmin管理在SQLServer实例中运行的进程。dbcreator创建和改变数据库。diskadmin管理磁盘文件。bulkadmin执行BULKINSERT语句。大型数据库——SQLServer2000程序设计二、向固定服务器角色添加登录向固定服务器角色添加登录成员使用企业管理器1、选择要建立用户的SQLSERVER服务器2、展开安全性,选择服务器角色,添加登录大型数据库——SQLServer2000程序设计三、固定数据库角色下表描述固定数据库角色。固定数据库角色描述db_owner进行所有数据库角色的活动,以及数据库中的其它维护和配置活动。该角色的权限跨越所有其它固定数据库角色。db_accessadmin在数据库中添加或删除WindowsNT4.0或Windows2000组和用户以及SQLServer用户。db_datareader查看来自数据库中所有用户表的全部数据。db_datawriter添加、更改或删除来自数据库中所有用户表的数据。db_ddladmin添加、修改或除去数据库中的对象(运行所有DDL)。db_securityadmin管理SQLServer2000数据库角色的角色和成员,并管理数据库中的语句和对象权限。db_backupoperator有备份数据库的权限。db_denydatareader拒绝选择数据库数据的权限。db_denydatawriter拒绝更改数据库数据的权限。大型数据库——SQLServer2000程序设计四、向固定数据库角色添加用户向固定数据库角色添加用户使用企业管理器1、选择要建立用户的SQLSERVER服务器2、展开数据库,选择角色所在的数据库3、单击角色,添加用户使用系统存储过程1、定义、删除角色:sp_AddRole、sp_DropRole2、修改角色成员:sp_droprolemember‘角色名’sp_AddRoleMember‘角色名’,‘用户名’注:在管理数据库角色的时候必须选择对应的数据库大型数据库——SQLServer2000程序设计当用户连接到SQLServer后,他们可以执行的活动由授予以下帐户的权限确定:1、用户的安全帐户。2、用户的安全帐户所属的WindowsNT或2000组或角色层次结构。用户若要进行任何涉及更改数据库定义或访问数据的活动,则必须有相应的权限。管理权限包括授予或废除执行以下活动的用户权限:1、处理数据和执行过程(对象权限)。2、创建数据库或数据库中的项目(语句权限)。3、利用授予预定义角色的权限(暗示性权限)。9.5权限管理大型数据库——SQLServer2000程序设计处理数据或执行过程时需要称为对象权限的权限类别:1、SELECT、INSERT、UPDATE和DELETE语句权限,它们可以应用到整个表或视图中。2、SELECT和UPDATE语句权限,它们可以有选择性地应用到表或视图中的单个列上。3、SELECT权限,它们可以应用到用户定义函数。4、INSERT和DELETE语句权限,它们会影响整行,因此只可以应用到表或视图中,而不能应用到单个列上。5、EXECUTE语句权限,它们可以影响存储过程和函数。注:对象权限的设置:SQLSERVER服务器\数据库\某一特定数据库对象\所有任务\管理权限一、对象权限大型数据库——SQLServer2000程序设计对象权限的设置使用企业管理器:SQLSERVER服务器\数据库\某一特定数据库对象\所有任务\管理权限使用T-SQL语句:GRANT对象权限ON数据库对象TO用户或角色一、对象权限大型数据库——SQLServer2000程序设计创建数据库或数据库中的项(如表或存储过程)所涉及的活动要求另一类称为语句权限的权限。例如,如果用户必须能够在数据库中创建表,则应该向该用户授予CREATETABLE语句权限。语句权限(如CREATEDATABASE)适用于语句自身,而不适用于数据库中定义的特定对象。语句权限有:1、BACKUPDATABASE、BACKUPLOG2、CREATEDATABASE3、CREATEDEFAULT、CREATERULE、CREATEFUNCTION4、CREATETA