1、2023年6月26日星期一第第11章安全管理章安全管理第11章 安全管理 11.1 安全控制概述 11.2 登录名 11.3 数据库用户 11.4 权限管理 11.5 角色211.1 安全控制概述 数据库的安全控制是指:在数据库应用系统的不同层次提供对有意和无意损害行为的安全防范。在数据库中 对有意的非法活动可采用加密存、取数据的方法控制;对有意的非法操作可使用用户身份验证、限制操作权来控制;对无意的损坏可采用提高系统的可靠性和数据备份等方法来控制。311.1.1安全控制模型4文件的访问权限11.1.2 SQL Server安全控制过程 在大型DBMS中,用户访问数据库数据要经过三个安全认证过
2、程:确认用户是否是数据库服务器的合法用户(具有登录名);第二个过程,确认用户是否是要访问的数据库的合法用户(是数据库用户);第三过程,确认用户是否具有合适的操作权限(权限认证)。5安全认证三个过程示意图61 1.登录名登录名2 2.数据库用户数据库用户3 3.权限权限认证认证 在SQL Server 2005如何实现3个认证过程?11.2 登录名 SQL Server 2005的安全权限是基于标识用户身份的登录标识符(Login ID,登录ID),登录ID就是控制访问SQL Server 数据库服务器的登录名。11.2.1 身份验证模式 11.2.2 建立登录名 11.2.3 删除登录名811
3、.2.1 身份验证模式 SQL Server 2005支持两类登录名:由SQL Server负责验证的登录名;Windows网络账户,可以是组用户。SQL Server 2005相应地提供了两种身份验证模式:Windows身份验证模式 混合验证模式91.Windows身份验证模式 SQL Server将用户的身份验证交给了 Windows操作系统来完成。在这种身份验证模式下,SQL Server 将通过Windows操作系统来获得用户信息,并对登录名和密码进行重新验证。使用Windows身份验证模式时,用户必须先登录到Windows操作系统,然后再登录到 SQL Server。102.混合身份
4、验证模式 允许Windows授权用户和SQL授权用户登录到SQL Server数据库服务器。如果希望允许非Windows操作系统的用户也能登录到SQL Server数据库服务器上,则应该选择混合身份验证模式。SQL Server身份验证的登录信息保存在SQL Server实例上;Windows身份验证的登录信息由Windows和SQL Server实例共同保存。11设置身份验证模式 系统管理员根据系统的实际应用情况设置SQL Server的身份验证模式。1.可以在安装SQL Server 2005时设置 2.也可以在安装完成后通过SSMS工具进行设置。12设置方法 在SSMS的对象资源管理器中
5、,在SQL Server实例上右击鼠标,选择“属性”命令。在“服务器属性”窗口左边的“选择页”上,单击“安全性”选项。在“服务器身份验证”部分,可以设置该实例的身份验证模式。13设置身份验证模式窗口11.2.2 建立登录名 建立登录名有两种方法:通过SSMS工具实现,通过T-SQL语句实现。15建立Windows身份验证的登录名 使用Windows登录名进行的连接,被称为信任连接。在SSMS的对象资源管理器中,依次展开“安全性”“登录名”节点。在“登录名”节点上右击鼠标,选择“新建登录名”命令。16 单击“搜索”按钮,弹出“选择用户或组”窗口。17 单击“高级”按钮,弹出“选择用户或组”窗口。
6、18 单击“立即查找”按钮,在下面将列出查找的结果。19建立SQL Server身份验证的登录名 在SSMS的对象资源管理器中,依次展开“安全性”“登录名”节点。在“登录名”节点上右击鼠标,选择“新建登录名”命令。在弹出的窗口中输入登录名。2021新建登录窗口的一些选项说明 强制密码过期 对该登录名强制实施密码过期策略。必须先选中“强制实施密码策略”才能启用此复选框。用户在下次登录时必须更改密码 首次使用新登录名时,SQL Server 将提示用户输入新密码。22新建登录窗口的一些选项说明 默认数据库 指定该登录名初始登录到SSMS时进入的数据库。默认语言 指定该登录名登录到SQL Serve
7、r时使用的默认语言。23用T-SQL语句建立登录名CREATE LOGIN login_name WITH|FROM :=WINDOWS WITH ,:=PASSWORD=password ,.24建立登录帐户的T-SQL语句(续):=SID=sid|DEFAULT_DATABASE=database|DEFAULT_LANGUAGE=language:=DEFAULT_DATABASE=database|DEFAULT_LANGUAGE=language25示例 例1创建SQL Server身份验证的登录帐户。登录名为:SQL_User2,密码为:a1b2c3XY。CREATE LOGIN
8、SQL_User2 WITH PASSWORD=a1b2c3XY26示例 例2创建Windows身份验证的登录帐户。从Windows域帐户创建 HYJWin_User2 登录帐户。CREATE LOGIN HYJWin_User2 FROM WINDOWS27示例 例3创建SQL Server身份验证的登录帐户。登录名为:SQL_User3,密码为:AD4h9fcdhx32MOP。要求该登录帐户首次连接服务器时必须更改密码。CREATE LOGIN SQL_User3 WITH PASSWORD=AD4h9fcdhx32MOP MUST_CHANGE2811.2.3 删除登录名 依次展开“安全
9、性”“登录名”节点。在要删除的登录名上右击鼠标,选择“删除”命令,弹出删除登录名属性窗口。单击“确定”按钮。29删除登录帐户的T-SQL语句DROP LOGIN login_name 不能删除正在使用的登录帐户,也不能删除拥有任何数据库对象、服务器级别对象的登录帐户。例1删除SQL_User2登录帐户。DROP LOGIN SQL_User23011.3 数据库用户 11.3.1 建立数据库用户 11.3.2 删除数据库用户 3111.3.1 建立数据库用户 展开要建立数据库用户的数据库。展开“安全性”节点,在“用户”节点上右击鼠标,选择“新建用户”命令。在“登录名”部分指定将要成为此数据库用
10、户的登录名。单击“登录名”文本框右边的 按钮,可以查找某登录名。32用T-SQL语句建立数据库用户CREATE USER user_name FOR|FROM LOGIN login_name user_name:指定在此数据库中用于识别该用户的名称。LOGIN login_name:指定要映射为数据库用户的SQL Server登录名。如果省略FOR LOGIN,则新的数据库用户将被映射到同名的SQL Server登录名。33示例 让SQL_User2登录帐户成为当前数据库中的用户,并且用户名同登录名。CREATE USER SQL_User234示例 本示例首先创建名为SQL_JWC且具有密
11、码的SQL Server身份验证的服务器登录名,然后在students数据库中创建与此登录帐户对应的数据库用户JWC。CREATE LOGIN SQL_JWC WITH PASSWORD=jKJl3$nN09jsK84;GOUSE students;GOCREATE USER JWC FOR LOGIN SQL_JWC;35注意 服务器登录名与数据库用户是两个完全不同的概念。具有登录名的用户可以登录到SQL Server实例上,而且只局限在实例上进行操作。数据库用户则是登录名以什么样的身份在该数据库中进行操作,是登录名在具体数据库中的映射,这个映射名(数据库用户名)可以和登录名一样,也可以不一
12、样3611.3.2 删除数据库用户 删除数据库用户,实际就是解除了登录名和数据库用户之间的映射关系。删除数据库用户之后,其对应的登录名仍然存在。删除方法:展开“数据库”“students”“安全性”“用户”节点。在要删除的用户名上右击鼠标,选择“删除”命令。37用T-SQL语句删除数据库用户 语句DROP USER user_name 其中user_name为要在此数据库中删除的用户名。示例删除SQL_User2用户。DROP USER SQL_User23811.4 管理权限 11.4.1 权限种类及用户分类 11.4.2 权限的管理391.权限种类 对象权限对象权限 是对表、视图等对象中数
13、据的操作权。是对表、视图等对象中数据的操作权。语句权限语句权限 创建对象的权限。隐含权限隐含权限 指由指由SQL Server预定义的服务器角色、数预定义的服务器角色、数据库角色、数据库拥有者和数据库对象拥据库角色、数据库拥有者和数据库对象拥有者所具有的权限。有者所具有的权限。402.数据库用户的分类 系统管理员 在数据库服务器上具有全部的权限。SQL Server 2005的默认系统管理员是“sa”。数据库对象拥有者 创建数据库对象的用户即为数据库对象拥有者。数据库对象拥有者对其所拥有的对象具有全部权限。普通用户 只具有对数据库数据的增、删、改、查权限。11.4.2 权限的管理 授予权限授予
14、权限:允许用户或角色具有某种操作:允许用户或角色具有某种操作权权 收回权限收回权限:不允许用户或角色具有某种操:不允许用户或角色具有某种操作权,或者收回曾经授予的权限。作权,或者收回曾经授予的权限。拒绝权限拒绝权限:拒绝某用户或角色具有某种操:拒绝某用户或角色具有某种操作权,既使用户或角色由于继承而获得这作权,既使用户或角色由于继承而获得这种操作权,也不允许执行相应的操作。种操作权,也不允许执行相应的操作。对象权限的管理 可以通过SSMS工具实现,也可以通过T-SQL语句实现。用SSMS工具实现 展开某数据库下的“安全性”“用户”,在要授权的用户上右击鼠标,在弹出的菜单中选择“属性”命令,弹出
15、数据库用户属性窗口。单击窗口左边“选择页”中的“安全对象”选项,出现“安全对象”窗口。数据库用户属性中的“安全对象”页单击单击“添加添加”弹弹出出“添加添加对对象象”窗口窗口“添加对象”窗口 在这个窗口中可以选择要添加的对象类型。默认是添加“特定对象”类用T-SQL语句实现权限管理 用于管理权限的T-SQL语句有三个:GRANT:用于授予权限。REVOKE:用于收回或撤消权限。DENY:用于拒绝权限授权语句 GRANT 对象权限名 ,ON 表名|视图名 TO 数据库用户名|用户角色名 ,48收权语句 REVOKE 对象权限名 ,ON 表名|视图名 FROM 数据库用户名|用户角色名 ,49拒绝
16、语句DENY 对象权限名 ,ON 表名|视图名 TO 数据库用户名|用户角色名 ,50示例 例例1为用户为用户user1授予授予Student表的查询权。表的查询权。GRANT SELECT ON Student TO user1 例例2为用户为用户user1授予授予SC表的查询权和插入表的查询权和插入权。权。GRANT SELECT,INSERT ON SC TO user1 例例3收回用户收回用户user1对对Student表的查询权。表的查询权。REVOKE SELECT ON Student FROM user1 例例4拒绝拒绝user1用户具有用户具有SC表的更改权。表的更改权。DE
17、NY UPDATE ON SC TO user1 51语句权限管理 用SSMS实现:基本同对象权限管理。用T-SQL语句实现。语句权限管理的T-SQL语句 授权语句授权语句 GRANT GRANT 语句权限名语句权限名 ,TO TO 数据库用户名数据库用户名|用户角色名用户角色名 ,53语句权限管理 收权语句 REVOKE REVOKE 语句权限名语句权限名 ,FROM FROM 数据库用户名数据库用户名|用户角色名用户角色名 ,54收权语句 拒绝语句 DENY DENY 语句权限名语句权限名 ,TO TO 数据库用户名数据库用户名|用户角色名用户角色名 ,55示例 例例5授予授予user1具
18、有创建表的权限。具有创建表的权限。GRANT CREATE TABLE TO user1 例例6授予授予user1和和user2具有创建表和视图具有创建表和视图的权限。的权限。GRANT CREATE TABLE,CREATE VIEW TO user1,user2 例例7收回授予收回授予user1创建表的权限。创建表的权限。REVOKE CREATE TABLE FROM user1 例例8拒绝拒绝user1创建视图的权限。创建视图的权限。DENY CREATE VIEW TO user15611.5 角色 为便于对用户及权限的管理,可以将一组具有相同权限的用户组织在一起,这一组具有相同权限
19、的用户就称为角色(Role)。SQL Server 2005中,角色分为:固定的服务器角色 固定的数据库角色 用户自定义的角色介绍 5711.5.1 建立用户定义的角色 属于数据库一级的角色。用户可以根据实际的工作职能情况定义自己的一系列角色,并给每个角色授予合适的权限。用户自定义的角色的成员可以是数据库的用户,也可以是用户定义的角色。58用SSMS建立用户角色 展开某数据库下的“安全性”“角色”节点,在“角色”上右击鼠标,在弹出的菜单中选择“新建”下的“新建数据库角色”命令,或者是在“角色”节点下的“数据角色”上右击鼠标,在弹出的菜单中选择“新建数据库角色”命令,在弹出“新建数据库角色”窗口
20、中进行相应设置。用T-SQL语句建立用户定义的角色CREATE ROLE role_name AUTHORIZATION owner_name role_name:待创建角色的名称。AUTHORIZATION owner_name:将拥有新角色的数据库用户或角色。如果未指定用户,则执行CREATE ROLE的用户将拥有该角色。60示例例1.创建用户自定义角色:CompDept,拥有者为创建该角色的用户。CREATE ROLE CompDept;例2.创建用户自定义角色:InfoDept,拥有者为 SQL_User1。CREATE ROLE InfoDept AUTHORIZATION SQL_
21、User1;6111.5.2 为用户定义的角色授权 对用户角色的授权的方法与为数据库用户授权方法完全一样。例3.为Software角色授予students数据库中Student表的查询权。GRANT SELECT ON Student TO Software 例4.为Admin角色授予students数据库中Student表的增、删、改、查权。GRANT SELECT,INSERT,DELETE,UPDATE ON Student TO Admin6211.5.3 为用户定义的角色添加成员 角色中的成员自动具有角色的全部权限,因此在为角色授权之后,就需要为角色添加成员了。为角色添加成员可以用S
22、SMS工具实现,也可以同T-SQL语句实现。用SSMS工具实现 展开某数据库下的“安全性”“角色”节点,在要添加成员的角色上右击鼠标,在弹出的菜单中选择“属性”命令,弹出数据库角色属性窗口。单击“添加”按钮,弹出“选择数据库用户或角色”窗口。进行相应选择用T-SQL语句实现 使用sp_addrolemember系统存储过程(存储过程是一段可调用执行的代码):sp_addrolemember rolename=role,membername=security_account rolename=role:当前数据库中的数据库角色的名称。membername=security_account:要添加
23、到角色中的数据库用户名。security_account可以是数据库用户、数据库角色、Windows 登录名或Windows组。示例 例5将Windows登录名HYJWin_User1添加到 当前数据库的Software角色中。EXEC sp_addrolemember Software,HYJWin_User1 例6将SQL_User2添加到当前数据库的Admin角色中(假设该角色已存在)。EXEC sp_addrolemember Admin,SQL_User211.5.4 删除用户定义角色中的成员 当不希望某用户是某角色中的成员时,可将用户从角色中删除。从角色中删除成员可以通过SSMS工具实现,也可以通过T-SQL语句实现。用SSMS工具实现 展开某数据库下的“安全性”“角色”节点,在要添加成员的角色上右击鼠标,在弹出的菜单中选择“属性”命令,弹出数据库角色属性窗口。在窗口中,选中要删除的成员名,单击“删除”按钮即可从角色中删除将所选成员。