数据库三级

Posted 364.99°

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库三级相关的知识,希望对你有一定的参考价值。

9.安全管理

选择、填空

9.1.安全控制概述

9.1.1.安全性与完整性概述

安全性是指保护数据以防止不合法的使用而造成数据被泄露、更改和破坏;完整性是指数据的准确性和有效性。

  1. 安全性( Security) : 保护数据以防止不合法用户故意造成的破坏
  2. 完整性( Integnty) : 保护数据以防止合法用户无意中造成的破坏
    简言之:安全性确保用户被允许做其想做的事情;完整性确保用户所做的事情是正确的

数据库中的安全控制指:在数据库系统的不同层次提供对有意和无意损害行为的安全防范。

9.1.2…数据库安全控制的目标

  1. 数据库安全控制的目标:保护数据免受意外或故意的丢失、破坏或滥用
  2. 保护数据,维护数据库安全性包括:允许或禁止用户操作数据库及其对象,从而防止数据库被滥用或误用。
  1. DBA:

    数据库管理员( DataBase Administrator , DBA )负责数据库系统的全部安全。因此,数据库系统的DBA必须能够识别最严重的威胁,并实施安全措施,采取合适的控制策略以最小化这些威胁
  2. 访问数据库的流程:

    当创建新账户时, DBMS向该表中插入一条新记录来保存新账户信息。当删除账户时, DBMS从该表中删除账户的记录

9.1.3.数据库安全的威胁

为了保证数据辉安全,系统的所有部分都必须是安全的。包括数据库、操作系统、网络、用户,甚至计算机系统所在的建筑和房屋。全面的数据库安全计划必须考虑下列情况:

9.1.4.安全控制模型

在一般的计算机系统中,安全措施是一级一级层层设置的。下图为计算机系统的安全控制模型图 ,它显示了计算机系统中从用户使用数据库应用程序开始一直到访问后台数据库数据,需要经过的安全认证过程。

9.1.5.授权和认证

  1. 授权

授权是将合法访问数据库或数据库对象的权限授予用户的过程,具体授予哪些用户对数据库的哪些部分具有哪些操作权限是由一个企业的实际情况决定的。授权的过程包括认证用户对对象的访问请求

  1. 认证

认证是一种鉴定用户身份的机制。是检验用户实际是否被准许操作数据库。它核实连接到数据库的人(用户)或程序的身份。认证最简单的形式:是与数据库连接时提供的用户名和密码。操作系统和数据库广泛使用的是基于口令的认证。对于更多的安全模式,特别是在网络环境下,也使用其他的认证模式,例如挑战应答系统数字签名等

现在的DBMS通常采用自主存取控制和强制存取控制两种方法来解决数据库安全系统的访问控制问题,有的DBMS只提供一种方法,有的两种都提供。无论采用哪种存取控制方法,需要保护的数据单元或数据对象包括从整个数据库到某个元组的某个部分。

两种存取方式:

  1. 自主存取控制:

    用户对不同的数据对象具有不同的存取权限,而且没有固定的关于哪些用户对哪些对象具有哪些存取权限的限制
  2. 强制存取控制:

    每一个数据对象被标以一定的密级,每一个用户也被授予4个许可证级别。对于任意一个对象,只有具有合法许可证的用户才可以存取。因此,强制存取控制本质上具有分层的特点,且相对比较严格

9.2.存取控制

9.2.1.自主存取控制

大型数据库管理系统几乎都支持自主存取控制(又称为自主安全模式),目前的SQL标准也对自主存取控制提供支持,这主要是通过SQL的GRANT(授予)、REVOKE(收回)和DENY(拒绝)语句来实现的

授予和收回权限是数据库管理员(DBA)的职责。数据库管理员(DBA)依照数据的实际应用情况将合适的权限授给相应的用户。

  1. 权限种类

    在自主存取控制中,通常将数据库中的权限划分为两类。

  2. 用户分类

    在自主存取控制中,一般将数据库中的用户按其操作权限的不同划分为以下三类:

9.2.2.强制存取控制

在强制存取控制中,DBMS将全部实体划分为主体和客体两大类:

  1. 主体

    主体是系统中的活动实体,既包括DBMS所管理的实际用户也包括代表用户的各个进程。

  2. 客体

    客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。

对于主体和客体,DBMS为它们的每个实例指派一个敏感度标记( Label)


敏感度标记:主体的敏感度标记被称为许可证级别( Clearance Level) , 客体的敏感度标记被称为密级( Classification Level)。敏感度标记被分为若干级别,例如绝密( Top Secret)、秘密( Secret)、可信( Confidentml )和公开( Public )等

  1. 用户(或主体)对客体的存取遵循的规则

    当某一用户(或某主体)以标记Label注册到系统时,系统要求他对任何客体的存取必须遵循如下规则
  1. 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
  2. 仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体

在某些系统中,第二条规则有些差别。这些系统规定:仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体,即用户可以为写入的数据对象赋予高于自己的许可证级别的密级。这样数据一旦被写入,该用户自己也不能再读取该数据对象了。这两种规则的共同点是它们均禁止了拥有高许可证级别的主体更新低密级的数据对象,从而防止了敏感数据的泄露。

  1. 橘皮书和紫皮书

    美国国防部颁布了 "橘皮书” 和 ”紫皮书” 对强制存取控制作了全面的描述和定义,这两份文献给出了通用安全性分级模式,共定义了D、C、B和A四类安全级别,从D类到A类级别依次增高
  1. 自主保护:

    C类分为两个子类C1、C2,C1安全级别低于C2。每个子类都支持自主存取控制,即存取权限由数据对象的所有者决定
    1.1 C1子类对所有权与存取权限加以区分,虽然它允许用户拥有自己的私有数据,但仍然支持共享数据的概念
    1.2 C2子类还要求通过注册、审计及资源隔离以支持责任说明( Accountability)
  2. 强制保护:

    B类分为三个子类B1、B2、B3, B1安全级别最低,B3最高
    2.1 B1子类要求 “标识化安全保护”, 并要求每个数据对象都必须标以一定的密级,同时还要求安全策略的非形式化说明
    2.2 B2子类要求安全策略的形式化( formal )说明,能识别并消除隐蔽通道( covert channel ),隐蔽通道的例子有:从合法查询的结果中推断出不合法查询的结果:通过合法的计算推断出敏感信息
    2.3 B3子类要求支持审计和恢复以及指定安全管理者
  3. 验证保护:

    A类要求安全机制是可靠的且足够支持对指定的安全策略给出严格的数学证明

9.3.审计追踪

审计追踪的概述:

  1. 审计跟踪实质上是一种特殊的文件或数据库,系统在上面自动记录用户对常规数据的所有操作。如对数据库的所有修改(更新、删除、插入等)日志,包括何时由何人修改等信息。
  2. 在一些系统中,审计跟踪与事务日志在物理上是集成的;在另外一些系统中,事务日志和审计跟踪是分开的。典型的审计跟踪记录包含的信息如下:
  1. 操作请求
  2. 操作终端
  3. 操作人
  4. 操作日期
  5. 元组、属性和影响
  6. 旧值
  7. 新值
  1. 审计跟踪对数据库安全有辅助作用。

9.4.统计数据库的安全性

统计数据库的安全性概述:

  1. 统计数据库:提供基于各种不同标准的统计信息或汇总数据。
  2. 统计数据库安全系统:是用于控制对统计数据库的访问。
    统计数据库允许用户查询聚合类型的信息,如总和、平均值、数量、最大值、最小值、标准差等,例如查询“职工的平均工资是多少”,但不允许查询个人信息,例如查询 “职工张三E的工资是多少?” 。
  3. 统计数据库的安全性问题
    在统计数据库中存在着特殊的安全性问题,即可能存在隐藏的信息通道,使得可以从合法的查询中推导出不合法的信息。

9.5.SQL Server的安全控制

9.5.1.身份验证模式

  1. Windows身份验证模式
  1. 适用对象:Windows操作系统的用户
  2. 当使用Windows身份验证模式时,用户必须首先登录到Windows操作系统中,然后再登录到SQL Server
  3. 用户登录到SQL Server时,只需选择Windows身份验证模式,而无须再提供登录名和密码,系统会从用户登录到Windows操作系统时提供的用户名和密码中查找当前用户的登录信息,以判断其是否是SQL Server的合法用户
  1. 混合身份验证模式
  1. 定义:混合身份验证模式是指SQL Server允许Windows授权用户和SQL授权用户登录到SQL Server数据库服务器
  2. 适用对象:非Windows操作系统的用户
  3. 如果希望允许非Windows操作系统的用户也能登录到SQL Server数据库服务器上则应该选择混合身份验证模式。如果在混合身份验证模式下选择使用SQL授权用户登录SQL Server数据库服务器,则用户必须提供登录名和密码两部分内容,因为SQL Server必须要用这两部分内容来验证用户的合法身份
  4. QL Server身份验证的登录信息(用户名和密码)都保存在SQL Server实例上,而Windows身份验证的登录信息是由Windows和SQL Server实例共同保存的

9.5.2.登录账户

SQL Server 2008的安全权限是基于标识用户身份的登录标识符(Login ID ,登录ID)的,登录ID就是控制访问SQLServer数据库服务器的用户账户。如果未指定有效的登录ID,则用户不能连接到SQL Server数据库服务器。在SQLServer 2008中,有两类登录账户:

  1. 由SQL Server自身负责身份验证的登录账户
  2. 登录到SQL Server的Windows网络账户,可以是组账户或用户账户

在安装完SQL Server 2008之后,系统本身会自动地创建一些登录账户,称为内置系统账户,用户也可以根据自己的需要创建自己的登录账户

  1. 建立登录账户

    创建新的登录账户的T-SQL语句是CREATE LQGIN,其简化语法格式为:
CREATE LOGIN login_name { WITH <option Jist1 > | FROM<sources> }
<sources> : : = ;
	WINDOWS [WITH<windows_options>[, ...]]
<option_list1> : : =
	PASSWORD = 'password' [, <option_list2> [,...]
<option_list2> : : =
	SID = sid
	| DEFAULT_DATABASE = database
	| DEFAULT_LANGUAGE = language
<windows_options> : : =
	DEFAULT_DATABASE = database
	| DEFAULT_LANGUAGE = language

各参数含义:

  1. login_name:指定创建的登录名。有四种类型的登录名: SQL Server身份验证的登录名、Windows身份验证的登录名、证书映射的登录名和非对称密钥映射的登录名。如果从Wmdows域账户映射login_name,则login_name必须用方括号[ ]括起来
  2. WINDOWS:指定将登录名映射到Windows用户名
  3. PASSWORD=‘password’:仅适用于SQL Server身份验证的登录名。指定新建登录名的密码
  4. SID = sid:仅适用于SQL Server身份验证的登录名。指定新登录名的GUID(全球唯一 标识符)。如果未选择此选项,则SQL Server将自动指派GUID
  5. DEFAULT_DATABASE = database:指定新建登录名的默认数据库。如果未包括此选项,则默认数据库将设置为master
  6. DEFAULT_LANGUAGE = language:指定新建登录名的默认语言。如果未包括此选项,则默认语言将设置为服务器的当前默认语

案例:创建SQL Server身份验证的登录账户。登录名为SQL User1,密码为a1b2c3XY

CREATE LOGIN SQL_User1 
	WITH PASSWORD='a1b2c3XY'

案例:创建Wmdows身份验证的登录账户。从Windows域账户创建[TEST\\Win_User2]登录账户

CREATE LOGIN [TEST\\Win_User2] 
	FROM WINDOWS

案例:建SQL Server身份验证的登录账户。登录名为SQL_User3,密码为AD4h9fcdhx32MOP。要求该登录账户首次连接服务器时必须更改密码

CREATE LOGIN SQL_User3 
	WITH PASSWORD='AD4h9fcdhx32MOP'
MUST_CHANGE
  1. 修改登录账户属性

    对于已经建立好的SQL Server登录账户,可以对登录账户的密码、默认数据库等属性进行修改。其语法格式如下:
ALTER LOGIN login_name
	{
	<status_option>
	| WITH <set_option>[, ...]
	}
<status_option> : : =
	ENABLE | DISABLE
<set_option> : : =
	PASSWORD ='password'
[ OLD_PASSWORD ='oldpassword']
]
| DEFAULT_DATABASE = databaseI 
| DEFAULT_LANGUAGE = language
| NAME = login_name

各参数含义:

  1. login_name:指定正在更改的登录名
  2. ENABLE| DISABLE:启用或禁用此登录名
  3. PASSWORD=‘password’:仅适用于SQL Server身份验证的登录账户。指定正在更改的登录名的密码
  4. OLD_PASSWORD=‘oldpassword’:仅适用于SQL Server身份验证的登录账户。要指定新密码的登录名的当前密码
  5. DEFAULT_DATABASE = database:指定将指派给该登录名的默认数据库
  6. DEFAULT_LANGUAGE = language:指定将指派给该登录名的默认语言
  7. NAME = login_name:重命名该登录名的新名称。如果是Windows身份验证的用户,则与新名称对应的Windows的用户名必须与SQL Server中的登录名相关联

案例:启用已禁用的登录账户。启用SQL_User1登录账户

ALTER LOGIN SQL_User1 ENABLE

案例:更改登录账户的密码。将SQL_User1登录账户的密码改为IsaPwd324

ALTER LOGIN SQL_User1 
	WITH PASSWORD='IsaPwd324'

案例:更改登录账户名。将SQL_User3登录账户名改为NewUser

ALTER LOGIN SQL_User3 
	WITH NAME = NewUser
  1. 删除数据库

    在删除登录账户时,应该先将该登录账户在各个数据库中映射的数据库用户删除掉(如果有的话), 然后再删除登录账户。否则会产生没有对应的登录账户的孤立的数据库用户。

    删除登录账户的T-SQL语句为DROP LOGIN,其语法格式为:
DROP LOGIN login_name
#其中login_name为要删除的登录账户的名字

注意:不能删除正在使用的登录账户,也不能删除拥有任何数据库对象、服务器级别对象的登录账户。

案例:删除SQL_User2登录账户

DROP LOGIN SQL_User2

9.5.3.数据库用户

数据库用户一般都来自于服务器上已有的登录账户,让登录账户成为数据库用户的操作称为“映射”。管理数据库用户的过程实际上就是建立登录账户与数据库用户之间的映射关系的过程。

默认情况下,新建立的数据库只有一一个用户:dbo,它是数据库的拥有者。

  1. 建立数据库用户

    建立数据库用户的T-SQL语句是CREATE USER,其简化的语法格式如下:
CREATE USER user_name [{ FOR | FROM | --指定在此数据库中用于识别该用户的名称
{ LOGIN login_name} ]		--指定要映射为数据库用户的SQL Server登录名

注意:
如果省略FOR LOGIN,则新的数据库用户将被映射到同名的SQL Server登录名。
不能使用CREATE USER语句创建guest用户,因为每个数据库中均已存在guest用户。默认guest用户是禁用状态 ,可通过授予guest用户CONNECT权限来启用该用户。

案例:首先创建名为SQL_JWC且具有密码的SQL Server身份验证的服务器登录名,然后在test数据库中创建与此登录名对应的数据库用户JWC

CREATE LOGIN SQL_JWC
	WITH PASSWORD = '123456'
GO
USE test
GO
CREATE USER JWC FOR LOGIN SQL_JWC
GO
  1. 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.对象名

  1. 删除数据库用户

    从当前数据库中删除一个用户,实际就是解除登录账户和数据库用户之间的映射关系,但并不影响登录账户的存在。删除数据库用户之后,其对应的登录账户仍然存在

    删除数据库语法格式为:
DROP USER user_name

注意:不能从数据库中删除拥有对象的用户。必须先删除或转移安全对象的所有者,然后再删除拥有这些对象的数据库用户。

9.5.4.权限管理

  1. 对象级别的权限
操作权限使用说明
SELECT允许用户查询数据。可以在表、视图和表值函数上授予用户该权限。
INSERT允许用户插人数据。可以在表、视图和表值函数上授予用户该权限。
注意:在SQL Server中,拥有INSERT权限的用户并不意味着一定拥有SELECT权限。
UPDATE允许用户修改数据。可以在表、视图和表值函数上授予用户该权限。
注意:在SQL Server中,拥有UPDATE权限的用户并不意味着一定拥有SELECT权限。
DELETE允许用户删除数据。可以在表、视图和表值函数上授予用户该权限。
注意:在SQL Server中,拥有DELETE权限的用户并不意味着一 定拥有SELECT权限。
REFERENCES如果用户要插人数据的表中有外键约束,而用户在该外键所引用的表上没有SELECT权限,则拥有该权限的用户能够向这样的表中插入数据。可以在表、视图、标量函数、表值函数上授予用户该权限。
EXECUTE允许用户具有执行存储过程和标量函数的权限。可以在存储过程、标量函数上授予用户该权限。

授权语句:

GRANT <permission> [,...n]
	ON
		[OBJECT : : ] [ schema_name ] .object_name [ ( column [, ...n])]
			TO <database_principal> [, ...n]
		[ WITH GRANT OPTION ]
<permission> : : =
	ALL [ PRMILEGES ] | permission [ ( column[,...n])]

各参数含义:

  1. Permission:指定可以授予的对象权限
  2. ALL:指授予适用于指定对象的所有ANSI-92权限
    对于不同的对象, ALL的含义有所不同:
    2.1 标量函数权限:EXECUTE、REFERENCES
    2.2 表值函数权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE
    2.3 存储过程权限:EXECUTE
    2.4 表权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE
    2.5 视图权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE
  3. PRIVILEGES:包含此参数是为了符合ANSI-92标准
  4. ON [ OBJECT: :] [schema name].object_name:指定被授予权限的对象。如果指定了schema_name,则OBJECT短语是可选的。如果使用了OBJECT短语,则需要作用域限定符( : : )。如果未指定schema_name,则使用默认架构。如果指定了schema_name,则需要架构作用域限定符(.)
  5. TO< databaSe_principal>:指定要向其授予权限的主体,可以是数据库用户名,也可以是用户定义的角色名
  6. WITH GRANT OPTION:指示该主体还可以向其他主体授予所指定的权限
  7. Column:指定表、视图或表值函数中将被授予权限的列名。只能在SELECT、REFERENCES及UPDATE操作 上对列进行授权

案例:授予用户BosaQdM对Address表具有SELECT权限

GRANT SELECT ON Address TO RosaQdM

案例:授予用户RosaQdM对HumanResources.Employeelnfo存储过程具有EXECUTE权限

GRANT EXECUTE ON OBJECT : : HumanResources.Employeelnfo TO RosaQdM

拒绝权限:

拒绝用户具有某权限使用的是DENY语句,在T-SQL中其简化语法格式如下:

DENY< permission >[, ...n] ON
	[OBJECT : : ][ schếma_name ].object_name [( column[,...n])]
		TO <database_principal> [, ...n]
	[CASCADE]
	[AS <database_principal> ]

其中, CASCADE表示要拒绝的权限也会被对此主体授予该权限的其他主体拒绝。其他各参数含义同GRANT语句

案例:拒绝用户RosaQdM对Person.Address表具有SELECT权限

DENY SELECT ON OBJECT : : Person.Address TO RosaQdM

案例:拒绝用户RosaQdM对HumanPesources.EmployeeInfo存储过程具有EXECUTE权限

DENY EXECUTE ON HumanPesources.EmployeeInfo TO RosaQdM

收权语句:

收权也就是将已授给用户的权限收回来,即不允许用户再具有该权限。语法格式如下:

REVOKE [ALL [ PRIVILEGES]] | <permission> [, ...n]
	ON
		[OBJECT : : ][ schema_name ].object_name [( column[, ...n])]
		{ FROM I TO} < database_principal> [,...n]
		[CASCADE][AS <role_name>]

各参数含义:

  1. CASCADE:对应GRANT语句中的WITH GRANT OPTION,表示要撤销的权限也会从此主体授予或拒绝该权限的其他主体中撤销
  2. AS < role_name>:指定要基于哪个角色发出这个命令
  3. 其他参数含义同GRANT语句

案例:撤销用户RosaQdM对Person.Address表的SELECT权限

REVOKE SELECT ON OBJECT : : Person.Address FROM RosaQdM
  1. 语句级别的权限

    SQL Sever允许对执行不同的语句进行权限控制,这些语句主要包括以下图中7种语句:

授权语句:

GRANT {ALL| <statement_permission> [, ...n ]|
	TO <database_principal> [, ...n]

案例:授予用户RosaQdM具有创建表的权限

GRANT CREATE TABLE TO RosaQdM

案例:授予用户user1和user2都具有创建表和视图的权限

GRANT CREATE TABLE , CREATE VIEW TO userl , user2

拒绝权限:

DENY {ALL | <statement_permission> [, ...n]}
	TO <database_principal> [, ...n]

案例:拒绝用户user1具有创建视图的权限

DENY CREATE VIEW TO user1

收权语句:

REVOKE {ALL | <statement_permission> [, ...n]}
	{FROM | TO} <database_principal> [, ...n]

案例:收回用户RosaQdM创建表的权限

REVOKE CREATE TABLE FROM RosaQdM

9.5.5.角色

概念:在数据库中,为便于对用户及权限进行管理,将一组具有相同权限的用户组织在一 起,这一组具有相同权限的用户就称为角色(Role)。

使用角色的好处系统管理员只需对权限的种类进行划分,然后将不同的权限授予不同的角色,而不必关心有哪些具体的用户。而且当角色中的成员发生变化时,比如添加成员或删除成员,系统管理员都无须做任何关于权限的操作。

在SQL Server 2008中,角色分为预定义的系统角色和用户定义角色两种。又根据角色作用范围的不同,系统角色又分为服务器级角色(称为固定服务器角色)和数据库级角色(称为固定数据库角色)。用户定义的角色均是数据库级角色。角色的分类如下图所示:

  1. 固定服务器级角色
  1. 固定服务器角色的作用域属于服务器范围,这些角色具有完成特定服务器级管理活动的权限
  2. 用户不能添加、删除或更改固定服务器角色
  3. 可以将登录账户添加到固定服务器角色中,使其成为服务器角色中的成员,从而具有服务器角色的权限
  4. 固定服务器角色中的每个成员都具有向其所属角色添加其他登录账户的权限
  1. SQL Server 2008支持的固定服务器角色及具有的权限表
固定服务器角色权限
bulkadmin具有执行BULK INSERT语句的权限。但即使某个用户被加到了bulkadmin角色中,他也只具有执行BULK INSERT语包的权限,而没有访问需要执行该语句的表的权限。
dbcreator具有创建、修改、删除和还原数据库的权限。
diskadmin具有管理磁盘文件(数据被指派给哪个文件组、附加和离数据库等)的权限。
processadmin具有管理运行在SQL Server中的进程的权限,这个角色可以根据需要终止长时间运行的进程。
securityadmin该角色是能够处理大多数的日常事务,但没有系统管理员的超级权限。
serveradmin该角色具有设置服务器级别的配置选项和关闭服务器的权限。
setupadmin该角色的权限仅局限于添加和删除链接服务器。
sysadmin系统管理员角色。具有在服务器及数据库.上执行任何操作的权限。Windows的Administrators组被自动映射为sysadmin角色中的成员,即Administrators组中的所有成员都对SQL Server具有系统管理员权限。
  1. 为固定服务器角色添加成员

    在固定服务器角色中添加成员使用的是sp_addsrvrolemember系统存储过程。语法格式如下:
sp_addsrvrolemember [ @ loginame = ] 'login'[@ rolename = ] 'role'

各参数的含义:

  1. [ @ loginame = ] ‘login’:要添加到固定服务器角色中的登录名。login可以是SQL Server 身份验证的登录名,也可是Windows身份验证的登录名。如果该Windows登录名没有SQL Server的访问权限,则该操作将自动授予该登录名对SQL Server的访问权限
  2. [@ rolename =]‘role’:要添加到的固定服务器角色的名称,默认值为NUL
  3. 该存储过程的返回值为: 0(成功)或1(失败)

案例:将Windows身份验证的TESTWin_UserI登录名添加到sysadmin角色中

EXEC sp_adsrvrolemember 'TESTWin_Userl' , 'sysadmin'

案例:将SQL身份验证的SQL_User2登录名添加到dbcreator角色中

EXEC sp_addsrvrolemember 'SQL_User2''dbcreator'
  1. 删除固定服务器角色成员

    从固定服务器角色中删除成员使用的是sp_dropsrvrolemember系统存储过程。语法格式如下:
sp_dropsrvrolemember [ @ loginame = ] 'login'[@ rolename = ] 'role'

各参数含义:

  1. [ @ loginame = ] ‘login’:要从固定服务器角色中删除的登录名
  2. [@ rolename= ] ‘role’:固定服务器角色名称
  3. 该存储过程的返回值为: 0(成功)或1(失败)

案例:从dbcreator角色中删除SQL_User2

EXEC sp_dropsrvrolemember 'SQL_User2' , 'dbcreator'
  1. 固定数据库角色

    固定数据库角色是定义在数据库级别上的,而且存在于每个数据库中。下表列出了固定数据库角色及其具有的权限。
固定数据库角色描述
db_accessadmin具有添加或删除数据库用户的权限。
db_backupoperator具有备份数据库、备份日志的权限。
db_datareader具有查询数据库中所有用户数据的权限。
db_datawriter具有插入、删除和更改数据库中所有用户数据的权限。
db_ddladmin具有执行数据定义语言(DDL)的权限。
db_denydatareader不允许具有查询数据库中所有用户数据的权限,等同于对所有的表和视图授予了DENYSELECT权限。
db_denydatawriter不允许具有INSERT、DELETE和UDPATE数据库中所有用户数据的权限。
db_owner具有在数据库中进行全部操作的权限,包括配置、维护数据库及删除数据库。
Db_securityadmin具有管理数据库角色、角色成员以及数据库中的语句和对象的权限。
  1. 系统预定义的数据库角色public:每个数据库用户都是public数据库角色中的成员
  2. 如果未向某个用户授予或拒绝对安全对象的特定权哏,则该用户将具有public角色的权限
  1. 为固定数据库角色添加成员

    数据库角色成员的来源是数据库中的用户。语法格式如下:
sp_addrolemember [ @ rolename = ] 'role'[@ membername = ] 'security_account'

各参数的含义:

  1. [ @ rolename = ] ‘role’:当前数据库中的数据库角色名
  2. [ @ membername = ] ‘security_account’:要添加到角色中的数据库用户名。security_ account可以是数据库用户、数据库角色、Windows登录名或Windows组。如果新成员是没有相应数据库用户的Windows登录名,则将为其创建一个对应的数据库用户
  3. 该存储过程的返回值为: 0(成功)或1(失败)

案例:将SQL_User2添加到当前数据库的db_datawriter角色中

EXEC sp_addrolemember 'db_datawriter''SQL_User2'
  1. 删除固定数据库角色成员

    从固定数据库角色中删除成员使用的是sp_droprolemember系统存储过程。语法格式如下:
sp_droprolemember [ @ rolename = ] 'role'[@ membername = ] 'security_account'

各参数的含义:

  1. [ @ rolename = ] ‘role’:当前数据库中的数据库角色名
  2. [ @ membername = ] ‘security_account’:要添加到角色中的数据库用户名。security_account可以是数据库用户、数据库角色、Windows登录名或Windows组。如果新成员是没有相应数据库用户的Windows登录名,则将为其创建-个对应的数据库用户
  3. 该存储过程的返回值为: 0(成功)或1(失败)

案例:在当前数据库中,删除db_datawriter角色中的SQL_USer2成员

EXEC sp_droprolemember 'db_datawriter' , 'SQL User2'
  1. 用户定义的角色

    用户定义的角色属于数据库一级的角色。 用户定义的角色主要是为简化用户在使用数据库时的权限管理。

创建用户定义的角色:

创建用户自定义角色的T-SQL语句是CREATE ROLE。其语法格式为:

CREATE ROLE role_name [ AUTHORIZATION owner_name ]

各参数的含义:

  1. role_name:待创建角色的名称
  2. AUTHORIZATION owner_name:将拥有新角色的数据库用户或角色。如果未指定用户,则执行CREATE ROLE的用户将拥有该角色

案例:在当前数据库中创建用户自定义角色MathDept,其拥有者为Software角色

CREATE ROLE MathDept AUTHORIZATION Software
  1. 为用户定义的角色授权。为用户定义的角色授权使用的T-SQL语句与实现对数据库用户授权完全一样
  2. 添加和删除用户定义的角色中的成员。与为固定数据库角色添加和删除成员使用语句一样
  3. 删除用户定义的角色。其语法格式: DROP ROLE role_name

案例: 在当前数据库中删除用户定义的角色InfoDept

DROP ROLE InfoDept

注意:不能从数据库中删除拥有安全对象的角色。若要删除拥有安全对象的数据库角色,必须首先转移这些安全对象的所有权,或从数据库中删除这些安全对象;不能从数据库中删除拥有成员的角色。若要删除有成员的角色,必须首先删除角色中的成员。

9.6.Oracle的安全管理

9.6.1.Oracle的系统简介

  1. Oracle不仅支持集中式应用,也支持跨平台、分布式数据库应用,即用户数据物理上可以被分布存储在网络的多个节点(场地)中,而逻辑上是一 个整体。

  2. 两级安全管理员

  3. Oracle分布式数据库系统没有全局数据库管理系统,没有全局数据字典,没有全局死锁检测及全局管理调度程序,其结点之间的互操作是由Oracle的通信模块和数据库服务器共同完成的,即网络中的每个数据库服务器都是全局事务的协调者

9.6.2.用户与资源管理

Oracle数据库中的用户按其操作权限的大小可分为DBA用户和普通用户。

  1. DBA用户:DBA用户是在数据库系统安装时由DBMS自动创建生成的,它们是sys和system用户,拥有全部的系统特权(权限)
  2. 普通用户:普通用户是由DBA用户或具有相应特权的用户创建,并授予系统特权的用户
  1. 建立用户

案例:建立一个Oracle数据库用户user1

CREATE USER user1 IDENTIFIED BY u66771
DEFAULT TABLESPACE student
QUOTA 5M ON student
  1. 命令中的user1是新建的用户名,密码是u66771
  2. DEFAULT子句指定新用户创建的数据库对象,如表、视图等将被存储在student表空间中
  3. QUOTA子句限制user1使用student表空间中的空间限额为5MB
  1. 管理用户和资源

    具有DBA特权的用户可以改变一个用户对系统资源的使用限额,并对用户密码进行管理。

案例:将user1用户对student表空间的空间使用限额增至60MB

ALTER USER user1
QUOTA 60M ON student

BA用户可

以上是关于数据库三级的主要内容,如果未能解决你的问题,请参考以下文章

c# 求WPF省市区三级联动代码,是从xml中得到省市区数据后添加到三个下拉列表。

三级联动怎么回显 javaweb

三级联动 省市 ajax的代码

三级联动 省市 ajax的代码

js三级联动(求思路更好)

ajax练习习题二三级联动