尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

第9章 安全管理

第9章 安全管理 存取控制自主存取控制大型数据库管理系统几乎都支持自主存取控制又称为自主安全模式目前的 SQL 标准也对自主存取控制提供支持这主要是通过 SQL 的 GRANT授予 REVOKE( 收回和 DENY拒绝语句来实现的。授予和收回权限是数据库管理员DBA的职责。DBA 依照数据的实际应用情況将合适的权限授给相应的用户。权限种类在自主存取控制中通常将数据库中的权限划分为两类。 一类是对数据库管理系统进行维护的权限另一类是对数据库中的对象和数据进存操作的权限这类权限又可以分为两类一类是对数据库对象的操作权限包括创建、删除和修改数据库对象称为语句权限一类是对数据库数据的操作权限包括对表、视图数据的增、删、改、查权限存储过程的执行权等称为对象权限。在数据库管理系统中除了通过显式的授权方法让用户获得权限外还有一种隐含的权限。隐含权限是用户自动具有的权限比如系统管理员自动具有全部的操作权限数据库对象拥有者自动具有所拥有对象的全部权限。隐含权限不能被更改。用户分类在自主存取控制中一般将数据库中的用户按其操作权限的不同划分为以下三类系统管理员。系统管理员在数据库服务器上具有全部的权限包括对服务器的配置和管理权限也包括对全部数据库的操作权限当用户以系统管理员身份进行操作时系统不对其权限进行检验。 每个数据库管理系统在安装好之后都有自己默认的系统管理员SQL Server 2008 的默认系统管理员是sa是 system administrator 的缩写但并不是 Windows 用户。sa是 SQLServer 身份验证的登录名而不是Windows身份验证的登录名。在安装好之后也可以授予其他用户具有系统管理员的权限。系统管理员在数据库服务器上具有全部的权限包括对服务器的配置和管理权限也包括对全部数据库的操作权限。数据库对象拥有者。创建数据库对象的用户即为数据库对象拥有者。数据库对象拥有者对其所拥有的对象具有全部权限。普通用户。普通用户只具有对数据库数据的操作权限。强制存取控制自主存取控制能够通过授权机制来有效控制对敏感数据的存取但由于用户对数据的存取是自主的因此用户可以自由地决定将数据的存取权限授予何人决定是否将授权权限授予其他人。在这种授权机制下仍可能存在数据的无意泄露。 比如。用户 U1 将自己权限范围内的某些数据存取权限转授给了用户 U2U1 的意图是只允许 U2 本人操作这些数据。但 U1 这种安全性要求并不能得到保证因为 U2 一旦获得对数据的访问权限就可以获得自己权限内的数据的副本然后在不征得 U1 同意的情况下传播数据副本。造成这一问题的根本原因在于 这种机制仅仅通过对数据的存取权限来进行安全控制而数据本身并没有安全性标记。要解决这个问题就需要对系统控制下的所有主客体实施强制存取控制策略。 在强制存取控制中DBMS 将全部实体划分为主体和客休两大类。主体是系统中的活动实体既包括 DBMS 所管理的实际用户也包括代表用户的各个进程。 客体是系统中的被动实体是受主体操纵的包括文件、基本表、索引、视图等。对于主体和客体DBMS为它们的每个实例指派一个敏感度标记Label。敏感度标记被分为若干级别例如绝密Top Secret、秘密Secret、可信Confidential) 和公开Public 等。主体的敏感度标记被称为许可证级别Clearance Level客体的敏感度标记被称为密级Classification Level。强制存取控制机制就是对比主体的 Label 和客体的 Label最终确定主体是否能够存取客体。当某一用户或某一主体以标记 Label 注册到系统时系统要求他对任何客体的存取必遵循如下规则(1)仅当主体的许可证级别大于或等于客体的密级时该主体才能读取相应的客体。(2)仅当主体的许可级别等于客体的密级时该主体才能写相应的客体。在某些系统中第二条规则与这里的规则2有些差别。这些系统规定仅当主体的许可级别小于或等于客体的密级时 该主体才能写相应的客体即用户可以为写入的数据对象赋予高于自己的许可证级别的密级。 这样数据一旦被写入该用户自己也不能再读取该数据对象了。这两种规则的共同点是它们均禁止了拥有高许可证级别的主体更新低密级的数据对象从而防止了敏感数据的泄露。强制存取控制MAC, Mandatory Access Control的两条核心铁律Bell-LaPadulaBLP模型铁律一向下读No Read Up—— 只能读“低于或等于”自己密级的数据目的防止高权限人员把机密信息泄露给低权限人员防泄露。铁律二向上写No Write Down—— 只能写“高于或等于”自己密级的数据目的防止低权限人员把垃圾/恶意信息写入高密级区域防污染/防篡改。注意写入后该数据会继承客体的高密级低权限用户自己就没权限再读回来了。强制存取控制是对数据本身进行密级标记无论数据如何被复制标记与数据是一个不可分的整体。只有符合密级标记要求的用户才能操作数据从而提供了更高级别的安全性。较高安全性级别提供的安全保护要保护较低级别的所有保护因此在实现强制存取控制时首先要实现自主存取控制即自主存取控制与强制存取控制共同构成了 DBMS 的安全机制。系统首先对要进行的数据操作进行自主存取控制检查通过后再对要存取的数据库对象进行强制存取控制检查只有通过了强制存取控制检查的数据库对象方可存取。强制安全模式本质上 分层次的它与自主安全模式相比更严格。通用安全性分级模式共定义了D、C、B和A四类安全级别从D类到A类级别依次增高。D类提供最小Minimal保护C类提供自主Discretionary保护B类提供强制Mandatory保护A类提供验证Verified保护。(1) 自主保护。C类分为两个子类 C1 和 C2C1 安全级别低于 C2。 每个子类都支持自主存取控制即存取权限由数据对象的所有者決定。①C1子类对所有权与存取权限加以区分虽然它允许用户拥有自己的私有数据但仍然支持共享数据的概念。②c2 子类还要求通过注册、审计及资源隔离以支持责任说明 Accountability。(2) 强制保护。B类分为3 个子类 B1、B2 和 B3B1 安全级别最低B3 最高。①BI 子类要求标识化安全保护 并要求每个数据对象都必须标以一定的密级同时还要求安全策略的非形式化说明。②B2 子类要求安全策略的形式化formal) 说明能识别并消除隐蔽通道covert channel。隐蔽通道的例子有从合法查询的结果中推断出不合法查询的结果通过合法的计算推断出敏感信息。③B3 子类要求支持审计和恢复以及指定安全管理者。(3) 验证保护。A类要求安全机制是可靠的且足够支持对指定的安全策略给出严格的数学证明。SQL Server的安全控制身份验证模式Windows身份验证模式微软公司将 SQL Server 安全性与 Windows 操作系统的安全性进行了绑定提供了以 windows 操作系统用户身份登录到 SQL Server 的方式。也就是 SQL Server 将用户的身份验证交给了 Windows 操作系统来完成。在这种身份验证模式下 SQL Server 将通过 Windows 操作系统来获得用户信息并对登录名和密码进行重新验证。当使用 Windows 身份验证模式时用户必须首先登录到 Windows 操作系统中然后再登录到 SQL Server 。而且用户登录到 SQL Server 时只需选择 Windows 身份验证模式而无须再提供登录名和密码系统会从用户登录到 Windows 操作系统时提供的用户名和密码中查找当前用户的登录信息以判断其是否是 SQL Server 的合法用户。对于 SQL Server 来说一般推荐使用 Windows 身份验证模式因为这种安全模式能够与 Windows 操作系统的安全系统集成在一起以提供更多的安全功能。混合SQL ServerWindows身份验证模式混合身份验证模式是指 SQL Server 允许 Windows 授权用户 和 SQL 授权用户登录到 SQL Server 数据库服务器。如果希望允许非 Windows 操作系统的用户也能登录到 SQL Server 数据库服务器上则应该选择混合身份验证模式。如果在混合身份验证模式下选择使用 SQL 授权用户登录 SQL Server 数据库服务器则用户必须提供登录名和密码两部分内容因为 SQL Server 必需要用这两部分内容来验证用户的合法身份。SQL Server 身份验证的登录信息用户名和密码都保存在 SQL Server 实例上而 Windows 身份验证的登录信息是由 Windows 和 SQL Server 实例共同保存的。只有在混合身份验证模式下sa才能登录到 SQL Server。不管是哪种身份验证模式Windows中的Administrator无需授权就可登录到SQL Server服务器。安装好SQL Server之后可以根据需要随时更改身份验证模式:。登录账户SQL Server 2008的安全权限是基于标识用户身份的登录标识符(Login ID,登录ID)的登录ID就是控制访问 SQL Server 数据库服务器的用户账户。如果末指定有效的登录ID则用户不能连接到SQL Server数据库服务器。在 SQL Server 2008 中有两类登录账户。一类是由 SQL Server 自身负责身份验证的登录账户另一类是登录到 SQL Server 的 Windows 网络账户可以是组账户或用户账户。数据库用户用户在有了登录账户之后他只能连接到 SQL Server 数据库服务器上并不具有访问任何用户数据库的权限只有成为某数据库的合法用户后才能访问该数据库。数据库用户一般都来自服务器上已有的登录账户让登录账户成为数据库用户的操作称映射。一个登录账户可以映射为多个数据库中的用户这种映射关系为同一服务器上不同数据库的权限管理带来了很大的方便。管理数据库用户的过程实际上就是建立登录账户与数据库用户之间的映射关系的过程。默认情况下新建立的数据库只有一个用户dbo它是数据库的拥有者。Guest 用户Guest 是 SQL Server 中一个特殊的数据库用户在实际应用中经常作为数据库的匿名访问者使用。 当没有映射到数据库用户的登录账户试图访问数据库时SQL Server 将尝试用 guest 用户来连接。可以通过为 guest 用户授予 CONNECT 权限来启用用户数据库中的 guest 用户。启用 guest 用户使 guest 用户具有连接权限的语句如下GRANT CONNECT TO guest;禁用 guest 用户收回 guest 用户的连接权限的语句如下REVOKE CONNECT TO guest;注意在每个数据库中还有一个特殊用户dbo该用户的全称是 database owner。dbo 是创建该数据库的登录账户映射到该数据库中的用户其所创建的对象都是 dbo.对象名。除guest用户外所有的数据库用户都必须对应一个登录账户登录名与数据库用户在服务器级:别是一对多的在数据库级别是一对一的权限管理当登录账户成为数据库中的合法用户之后该账户除了具有一些系统视图的查询权限之外并不对数据库中的用户数据和对象具有任何操作权限因此下一步就需要为数据库中的用户授予数据库数据及对象的操作权限。对象级别的权限数据库对象上允许的操作权限可以分为6种不同的类型操作权限使用说明SELECT允许用户查询数据。可以在表、视图和表值函数上授予用户该权限。INSERT允许用户插入数据。可以在表、视图和表值函数上授予用户该权限。注意不同系统对该权限的管理不同在 SQL Server 中拥有 INSERT 权限的用户并不意味着一定拥有 SELECT 权限。UPDATE允许用户修改数据。可以在表、视图和表值函数上授予用户该权限。同 INSERT一样在 SQL Server 中拥有 UPDATE 权限的用户并不意味着一定拥有 SELECT 权限。DELETE允许用户删除数据。可以在表、视图和表值函数上授予用户该权限。同样在 SQL Server 中拥有 DELETE 权限的用户并不意味着一定拥有 SELECT 权限。REFERENCES如果用户要插入数据的表中有外键约束而用户在该外键所引用的表上没有 SELECT 权限则拥有该权限的用户能够向这样的表中插入数据、 可以在表、视图 、标量函数、表值函数上授予用户该权限。EXECUTE允许用户具有执行存储过程和标量函数的权限。 可以在存储过程、标量函数上授予用户该权限。(1) 授权语句。T-SQL 授权语句的筒化语法格式为GRANTpermission[,...n]ON[ОВЈЕСТ ::][schema_name].object_name[(column[,...n])]TOdatabase_principal[,...n][WITHGRANTOPTION]permission::ALL[PRIVILECES]|permission[(column[,...n])](2) 拒绝权限。拒绝用户具有某权限使用的是 DENY 语句在 T-SQL 中其简化语法格式如下DENYpermission[,...n]ON[OBJECT ::][schema_name].object_name[(column[,...n])]TOdatabase_principal[,...n][CASCADE][ASdatabase_principal]其中CASCADE 表示要拒绝的权限也会被对此主体授予该权限的其他主体拒绝。(3) 收权语句。收权也就是将已授给用户的权限收回来即不允许用户再具有该权限。收权语句使用 REVOKE在T-SQL 中该语句的简化语法格式如下REVOKE[ALL[PRIVILEGES]]|permission[,...n]ON[OBJECT ::][schema_name].object_name[(column[,...n])]{|FROM|TO}database_principal[,...n][CASCADE][ASrole_name]角色在数据库中为便于对用户及权限进行管理可以将 一组具有相同权限的用户组织在一起这一组具有相同权限的用户就称为角色Role。 角色类似干 Windows 操作系统安全体系中组的概念。 在实际工作中有大量的用户其权限是一样的如果让数据库管理员在每次创建完用户后都对每个用户分别授权则是一件非常麻烦的事情。 但如果把其有相同权限的用户集中在角色中进行管理则会方便很多。为一个角色进行权限管理就相当于对该角色中的所有成员进行操作。可以为有相同权限的一类用户建立一个角色然后为角色授予合适的权限。使用角色的好处是系统管理员只需对权限的种类进行划分然后将不同的权限授予不同的角色而不必关心有哪些具体的用户。而且当角色中的成员发生变化时比如添加成员或删除成员系统管理员都无须做任何关于权限的操作。在 SQL Server 2008 中角色分为预定义的系统角色和用户定义角色两种。同时根据角色 作用范围的不同系统角色又分为服务器级角色称为固定服务器角色和数据库级角色称为固定数据库角色。用户定义的角色均是数据库级角色。固定服务器角色固定服务器角色的作用域属于服务器范围这些角色具有完成特定服务器级管理活动的权 限。用户不能添加、删除或更改固定服务器角色。可以将登录账户添加到固定服务器角色中使其成为服务器角色中的成员从而具有服务器角色的权限。固定服务器角色中的每个成员都具有向其所属角色添加其他登录账户的权限。固定服务器角色描述bulkadmin具有执行 BULK INSERT 语句的权限。需要说明的是即使某个用户被加到了 bulkadmin 角色中他也只具有执行 BULK INSERT 语句的权限而没有访问需要执行该语句的表的权限这意味着除了要把用户加到 bulkadmin 角色中外还需要授予用户在 执行 BULK INSERT 语句的表上具有 INSERT 权限。此外还需要保证用户在 BULK INSERT 语句所引用的表上具有恰当的 SELECT 权限dbcreator具有创建、修改、删除和还原数据库的权限diskadmin具有管理磁盘文件 数据被指派给哪个文件组、附加和分离数据库等的权限processadmin具有管理运行在 SQL Server 中的进程的权限这个角色可以根据需要终止长时间运行的进程securityadmin对于专门管理登录账户、读取错误日志以及执行 CREATE DATABASE 权限的账户来说这个角色是非常便捷的。该角色是能够处理大多数的日常事务但没有系统管理员的超级权限serveradmin该角色具有设置服务器级别的配置选项和关闭服务器的权限setupadmin该角色的权限仅局限于添加和删除能接服务器sysadmin系统管理员角色。具有在服务器及数据库上执行任何操作的权限。需要注意的是Windows的 Administralors 组被自动映射为 sysadmin 角色中的成员即 Administrators 组中的所有成员都对 SQL Server具有系统管理员权限除了表列出的固定服务器角色外还有一个系统预定义服务器角色 public。每个 SQL Server 名都是 public 服务器角色中的成员。如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限则该用户将具有授予 public 角色的权限。固定数据库角色固定数据库角色是定义在数据库级别上的而且存在于每个数据库中。用户不能添加、删除或更改固定数据库角色但可以将数据库用户添加到固定数据库角色中使其成为数据库角色中的成员从而具有数据库角色的权限。固定数据库角色的成员来自每个数据库中的用户。固定数据库角色为管理数据库一级的权限提供了方便。固定数据库角色描述db_accessadmin具有添加或删除数据库用户的权限db_backupoperator具有备份数据库、备份日志的权限db_datareader具有 SELECT查询数据库中所有用户数据的权限db_datawriter具有 INSERT插入、DELETE更改 和 UPDATE删除数据库中所有用户数据的权限db_ddladmin具有执行数据定义语言DDL的权限db_denydatareader不允许具有查询数据库中所有用户数据的权限等同于对所有的表和视图授予了 DENY SELECT 权限db_denydatawriter不允许具有 INSERT插入、DELETE更改 和 UDPATE删除 数据库中所有用户数据的权限db_owner具有在数据库中进行全部操作的权限包括配置、维护数据库及删除数据库db_securityadmin具有管理数据库角色、角色成员以及数据库中的语句和对象的权限例在SQLServer2008某数据库中有表T(A,B)和S(A,C)。现在依次执行如下SQL命令①create role R1; //添加用户角色R1②create user U1; //添加用户U1③grant INSERT on T to R1; //授权用户R1在表上T具有insert(插入)权限④sp_addrolemember ‘R1’, ‘U1’; //将用户U1添加到R1角色中⑤Ssp_addrolemember ‘db_datareader’, ‘U1’; //将用户U1添加到db_datareader角色中⑥deny SELECT on T to R1; //不允许角色R1在表上T上具有查询的功能db_datareader 是系统自带的角色它本身拥有对所有用户表T表和S表的 SELECT 权限结果U1能够查询和插入S表数据但不能够查询T表数据。Oracle的安全管理Oracle的安全控制机制可分为数据库级的安全控制、表级、行级和列级的安全:控制。数据库级的安全性通过用户身份认证和授予用户相应系统权限来保证而表级、行:级、列级的安全性是通过授予或回收对象特权保证的。Oracle数据库中的用户按其操作权限大小可分DBA用户和普通用户。对数据库性能监控的主要内容包括数据缓冲区的命中率、库缓冲、用户锁、锁与等待、回滚段、临时段使用情况、索引的使用情况、等待事件和共享池等。
返回列表