1、第14章 安全管理,14.1 安全控制概述14.2 登录帐户管理14.3 数据库用户管理14.4 数据库用户权限管理14.5 角色,14.1 安全控制概述,安全性问题的提出数据库安全性概念计算机系统安全性层次数据库安全控制模型SQL Server安全控制过程SQL Server用户分类,问题的提出,数据库的一大特点是数据可以共享数据共享必然带来数据库的安全性问题数据库系统中的数据共享不能是无条件的共享例:军事秘密、国家机密、新产品实验数据、 市场需求分析、市场营销策略、销售计划、 客户档案、医疗档案、银行储蓄数据,数据库安全性概念,数据库的安全性是指保护数据库,防止因用户非法使用数据库造成数据
2、泄露、更改或破坏。数据库系统中的数据共享必须是在DBMS统一的严格的控制之下,只允许有合法使用权限的用户访问允许他存取的数据。,计算机系统安全性层次,物理层:计算机系统在物理硬件上的安全性保护。操作系统层:操作系统本身提供的安全性保护措施。网络层:网络安全控制机制。数据库系统层:数据库系统应该有完善的访问控制机制,检查数据库用户的合法性以及数据库操作权限。数据层:直接对数据加密。,数据库安全控制模型,数据库安全控制,数据库系统层安全性保护措施,身份认证:系统内部记录着所有合法用户的标识,每次用户要求进入系统时,由系统将用户提供的身份标识与系统内部记录的合法用户标识进行核对,通过鉴定后才提供系统
3、使用权。操作权限控制:对于通过鉴定获得系统使用权的用户(即合法用户),系统根据他的存取权限定义对他的各种操作请求进行控制确保他只执行合法操作。,SQL Server安全控制过程,SQL Server用户的安全验证过程,一个用户如果要访问SQL Server数据库中的数据,他必须要经过三个认证过程:第一个认证过程是身份验证,这使用登录账号来标识用户,身份验证只验证用户连接到SQL Server数据库服务器的资格,即验证该用户是否具有连接到数据库服务器的“连接权”。第二个认证过程是当用户访问数据库时,他必须具有对具体数据库的访问权,即验证用户是否是数据库的合法用户。第三个认证过程是当用户操作数据库
4、中的数据或对象时,他必须具有所要进行的数据库数据操作的操作权,即验证用户是否具有操作许可。,三个安全认证过程图示,SQL Server用户分类,根据用户登录层次分类根据用户操作权限分类,根据用户登录层次分类,分为SQL Server登录用户和数据库用户只有先成为合法的SQL Server登录用户,才有可能成为合法的数据库用户,登录用户(login user),数据库用户(database user),从用户操作权限角度分类,数据库中的用户按其操作权限的大小可分为如下三类:数据库系统管理员:数据库系统管理员(在SQL Server中为sa)在数据库中具有全部的权限,当用户以系统管理员身份进行操作
5、时,系统不对其权限进行检验。数据库对象拥有者:创建数据库对象的用户即为数据库对象拥有者。数据库对象拥有者对其所拥有的对象具有一切权限。数据库访问用户:数据库访问用户只具有对数据库数据的增、删、改、查权。,14.2 登录帐户管理,SQL Server有三个默认的用户登录帐号sa:拥有全部系统权限和数据库权限administratorsbuiltin:SQL Server提供给Windows 的系统管理员帐户Guest:默认的普通用户帐户系统管理员的工作 建立新的登录用户修改登录密码删除登录用户,SQL Server的帐户验证模式,帐户验证是用来确认登录SQL Server的用户登录帐号和密码的正
6、确性,由此来验证其是否具有连接SQL Server的权限。 SQL Server 提供了两种确认用户的验证模式:Windows身份验证模式仅允许授权的Windows用户访问SQL Server混合身份验证模式仅允许授权的Windows用户和非Windows用户访问SQL Server,连接SQL Server服务器的过程,设置登录验证模式方法,在安装SQL Server时设置验证模式在企业管理器中设置验证模式,在安装SQL Server时设置验证模式,在企业管理器中设置验证模式,验证模式选择,建立新的登录帐户,通过企业管理器新建登录用户利用系统存储过程sp_addlogin新建登录用户,新的登
7、录用户user1,修改登录密码,输入新密码,确认新密码,用T-SQL语句建立登录帐户,CREATE LOGIN login_name WITH | FROM := WINDOWS WITH ,. := PASSWORD = password , ,. := SID = sid | DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language := DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language,2018年4月13日7时11分,30,示例,例1创建SQL Server身份验证
8、的登录帐户。登录名为:SQL_User2,密码为:a1b2c3XY。CREATE LOGIN SQL_User2 WITH PASSWORD = a1b2c3XY,2018年4月13日7时11分,31,示例,例2创建Windows身份验证的登录帐户。从Windows域帐户创建 HYJWin_User2 登录帐户。CREATE LOGIN HYJWin_User2 FROM WINDOWS,2018年4月13日7时11分,32,示例,例3创建SQL Server身份验证的登录帐户。登录名为:SQL_User3,密码为:AD4h9fcdhx32MOP。要求该登录帐户首次连接服务器时必须更改密码。
9、CREATE LOGIN SQL_User3 WITH PASSWORD = AD4h9fcdhx32MOP MUST_CHANGE,2018年4月13日7时11分,33,删除登录用户,删除登录帐户的T-SQL语句,DROP LOGIN login_name不能删除正在使用的登录帐户,也不能删除拥有任何数据库对象、服务器级别对象的登录帐户。例4删除SQL_User2登录帐户。 DROP LOGIN SQL_User2,2018年4月13日7时11分,35,14.3 数据库用户管理,数据库用户管理概述数据库管理员的工作创建数据库的用户删除数据库的用户(略),数据库用户管理概述,用户具有了登录账号
10、之后,他只能连接到SQL Server服务器上,但不具有访问任何数据库的能力,只有成为了数据库的合法用户后,才能访问此数据库。 数据库的用户只能来自于服务器上已有的登录账号,让登录账号成为数据库的用户就称为“映射”。一个登录账号可以映射为多个数据库中的用户。管理数据库用户的过程实际上就是建立登录账号与数据库用户之间的映射关系的过程。默认情况下,新建立的数据库只有一个用户,就是:dbo,它是数据库的拥有者。,授权登录用户为数据库用户,方法一:在企业管理器 “安全性”中创建数据库用户方法二:在数据库“用户”对象中创建数据库用户方法三:利用系统存储过程sp_grantdbaccess 创建数据库用户
11、,在“安全性”中创建数据库用户,查看新建的数据库用户,在数据库“用户” 中创建数据库用户,查看新建的数据库用户,用T-SQL语句建立数据库用户,CREATE USER user_name FOR | FROM LOGIN login_name user_name:指定在此数据库中用于识别该用户的名称。LOGIN login_name:指定要映射为数据库用户的SQL Server登录名。如果省略FOR LOGIN,则新的数据库用户将被映射到同名的SQL Server登录名。,2018年4月13日7时11分,45,示例,例5.让SQL_User2登录帐户成为students数据库中的用户,并且用户
12、名同登录名。USE students;GOCREATE USER SQL_User2,2018年4月13日7时11分,46,示例,例6.本示例首先创建名为SQL_JWC且具有密码的SQL Server身份验证的服务器登录名,然后在students数据库中创建与此登录帐户对应的数据库用户JWC。CREATE LOGIN SQL_JWC WITH PASSWORD = jKJl3$nN09jsK84;GOUSE students;GOCREATE USER JWC FOR LOGIN SQL_JWC;,2018年4月13日7时11分,47,14.3.3 删除数据库用户,DROP USER user
13、_name例7删除SQL_User2用户。 DROP USER SQL_User2,2018年4月13日7时11分,48,14.4 数据库用户权限管理,权限管理概述权限种类 权限管理的内容使用企业管理器管理权限使用Transact-SQL管理权限,权限管理概述,当用户成为数据库中的合法用户之后,他除了具有一些系统表的查询权之外,并不对数据库中的对象具有任何操作权,因此,下一步就需要为数据库中的用户授予数据库的操作权。实际上将登录账号映射为数据库用户的目的也是为了方便对用户授予数据库对象的操作权。,权限种类,在SQL Server 2000 中,权限分为对象权限、语句权限和隐含的权限三种。对象权
14、限:对象权限是指用户对数据库中的表、视图等对象的操作权,例如是否允许查询、增加、删除和修改数据等。语句权限:这种权限专指是否允许执行下列语句:CREATE TABLE、CREATE VIEW等与创建数据库对象有关的操作。隐含权限:隐含权限是指由SQL Server预定义的服务器角色、数据库角色、数据库拥有者和数据库对象拥有者所具有的权限,隐含权限相当于内置权限,不需要再明确地授予这些权限。例如,数据库拥有者自动地拥有对数据库进行一切操作的权限。,对象权限,ALTER:具有更改特定数据库对象属性的权限。DELETE、INSERT、UPDATE和SELECT:具有对表和视图数据进行删除、插入、更改
15、和查询的权限,其中UPDATE和SELECT可以对表或视图的单个列进行授权。EXECUTE:具有执行存储过程的权限。REFERENCES:具有通过外键引用其他表的权限。,2018年4月13日7时11分,52,语句权限,CRAETE TABLE:创建表的权限。CREATE VIEW:创建视图的权限。CREATE PROCEDURE:创建存储过程的权限。CREATE FUNCTION:创建函数的权限。,2018年4月13日7时11分,53,14.4.2 权限管理,权限的管理包含如下三个内容:授予权限:允许用户或角色具有某种操作权。收回权限:不允许用户或角色具有某种操作权,或者收回曾经授予的权限。禁
16、止权限(拒绝访问):拒绝某用户或角色具有某种操作权,既使用户或角色由于继承而获得这种操作权,也不允许执行相应的操作。管理权限可以使用企业管理器实现,也可以使用Transact-SQL语句实现。,使用企业管理器管理权限,使用企业管理器管理对象权限使用企业管理器管理语句权限,使用企业管理器管理对象权限,仓库管理数据库中的user1用户,权限标记说明,授予权限:若要授予用户对某个对象(表、视图、存储过程)的操作权(表和视图为:SELECT、INSERT、UPDATE、DELETE,存储过程为:EXEC),可单击相应的方框,使其中出现标记。禁止权限:若要拒绝此用户对某个对象的操作权,可单击相应的方框,
17、使其中出现标记。收回权限:若要收回此用户对某个对象的操作权,可单击相应的方框,使其方框成为空的。,使用企业管理器管理语句权限,使用Transact-SQL语句管理权限,管理权限语句在SQL语言中属于数据控制语句(DCL)。在Transact-SQL语句中,用于管理权限的语句有三个:GRANT语句(用于授权):允许用户或角色具有某种操作权。REVOKE语句(用于收回权限):不允许用户或角色具有某种操作权,或者收回曾经授予的权限。DENY语句(用于禁止权限):拒绝某用户或角色具有某种操作权,既使用户或角色由于继承而获得这种操作权,也不允许执行相应的操作。,使用Transact-SQL语句管理对象权
18、限,授予对象权限 收回(撤消)对象权限 禁止(拒绝)对象权限,授予对象权限语句,GRANT 对象权限名 , ON 表名 | 视图名 | 存储过程名 TO 数据库用户名 | 用户角色名 , (其中:对象权限名可以是ALL、SELECT、INSERT、UPDATE、DELETE和EXECUTE等)例:为用户user1授予仓库表的查询权。 GRANT SELECT ON 仓库 TO user1例:为用户user1授予职工表的查询权和插入权。 GRANT SELECT,INSERT ON 职工 TO user1,收回对象权限语句,REVOKE 对象权限名 , ON 表名 | 视图名 | 存储过程名 F
19、ROM 数据库用户名 | 用户角色名 , 例:收回用户user1对职工表的查询权。REVOKE SELECT ON 职工 FROM user1,禁止对象权限语句,DENY 对象权限名 , ON 表名 | 视图名 | 存储过程名 TO 数据库用户名 | 用户角色名 , 例:禁止user1用户具有职工表的更改权。 DENY UPDATE ON 职工 TO user1,使用Transact-SQL语句管理语句权限,授权语句GRANT 语句权限名 , TO 数据库用户名 | 用户角色名 , 收权语句REVOKE 语句权限名 , FROM 数据库用户名 | 用户角色名 , 拒绝权限 DENY 语句权限名
20、 , TO 数据库用户名 | 用户角色名 , ,语句权限名可以是:BACKUP DATABASE BACKUP LOG CREATE DATABASE CREATE DEFAULT CREATE FUNCTION CREATE PROCEDURE CREATE RULE CREATE TABLE CREATE VIEW,例:授予user1具有创建数据库表的权限。 GRANT CREATE TABLE TO user1例:授予user1和user2具有创建数据库表和视图的权限。 GRANT CREATE TABLE, CREATE VIEW TO user1, user2例:收回授予user1创
21、建数据库表的权限。 REVOKE CREATE TABLE FROM user1例:拒绝user1创建视图的权限。 DENY CREATE VIEW TO user1,14.5 数据库用户角色,角色概念与分类管理服务器角色管理数据库角色,角色概念与分类,在数据库中,为便于对用户及权限的管理,可以将一组具有相同权限的用户组织在一起,这一组具有相同权限的用户就称为角色(Role)。 在SQL Server 2000中,角色分为固定的系统角色和用户自定义的角色。系统角色又分为固定的服务器角色和固定的数据库角色,服务器角色是为整个服务器设置的,而数据库角色是为具体的数据库设置的。用户自定义的角色属于数
22、据库一级的角色。用户自定义的数据库角色有两种类型:即标准角色和应用程序角色。,管理数据库角色,使用企业管理器管理数据库角色使用系统存储过程管理数据库角色,使用企业管理器管理数据库角色,显示固定的数据库角色管理自定义的数据库标准角色 建立自定义的应用程序角色,显示固定的系统数据库角色,管理自定义的数据库标准角色,创建数据库标准角色为自定义的角色授权 添加自定义角色的成员 删除自定义角色的成员 (略),创建数据库标准角色,输入角色名,说明:也可暂不添加用户,新角色,为自定义的角色授权,单击,添加自定义角色的成员,单击,建立用户定义的角色,CREATE ROLE role_name AUTHORIZ
23、ATION owner_name role_name:待创建角色的名称。 AUTHORIZATION owner_name:将拥有新角色的数据库用户或角色。如果未指定用户,则执行CREATE ROLE的用户将拥有该角色。,2018年4月13日7时11分,87,示例,例1.创建用户自定义角色:CompDept,拥有者为创建该角色的用户。CREATE ROLE CompDept;例2.创建用户自定义角色:InfoDept,拥有者为SQL_User1。 CREATE ROLE InfoDept AUTHORIZATION SQL_User1;,2018年4月13日7时11分,88,为用户定义的角色授
24、权,使用SQL语句实现对用户角色的授权与为数据库用户授权完全一样。例3.为Software角色授予Student表的查询权。 GRANT SELECT ON Student TO Software例4.为Admin角色授予Student表的增、删、改、查权。 GRANT SELECT,INSERT,DELETE, UPDATE ON Student TO Admin,2018年4月13日7时11分,89,为用户定义的角色添加成员,sp_addrolemember rolename = role, membername = security_account rolename = role:当前数
25、据库中的数据库角色名。 membername = security_account:要添加到角色中的数据库用户名,可以是数据库用户、数据库角色、Windows 登录名或Windows组。如果新成员是没有相应数据库用户的Windows登录名,则将为其创建一个对应的数据库用户。,示例,例5将Windows登录名HYJWin_User1添加到Software角色中。 EXEC sp_addrolemember Software, HYJWin_User1 例6将SQL_User2添加到Admin角色中(假设该角色已存在)。 EXEC sp_addrolemember Admin, SQL_User2,删除用户定义角色中的成员,sp_droprolemember rolename = role , membername = security_account rolename = role:将从中删除成员的数据库角色名。 membername = security_account:被从数据库角色中删除的用户名。例7删除Admin角色中的SQL_User2成员。 EXEC sp_droprolemember Admin, SQL_User2,