数据库——实验10 数据库的安全性

发布于:2024-05-09 ⋅ 阅读:(26) ⋅ 点赞:(0)

1. 安全认证模式

SQL Server有两种身份认证模式:Windows  认证模式和混合认证模式(即 Windows 身份验证和 SQL Server 身份验证)。

(1)仅 Windows  认证模式:这是 SQL  Server  2005  的默认身份验证模式,适用于所有登录者均为 Windows 2000 Server/NT 操作系统用户的情况。但在 Windows 98 操作系统上运行的 SQL Server 实例不支持 Windows 身份验证。

(2)混合认证模式:该模式可用于两类登录者,对于登录时提供了SQL Server 2005 登录账户者,系统将使用SQL   Server身份验证对其进行验证。对于没有提供 SQL  Server 2005登录账户或请求 Windows 身份验证的登录者,则使用Windows  身份验证对其进行 

2. 创建与管理登录账户

登录名是基于服务器级使用的用户名称,为了访问 SQL Server 系统,用户必须提供正确的登录账号和口令。

可以通过两种方式增加登录账户:创建新的 SQL Server 登录账户和基于 Windows 组或用户创建登录账户,创建登录账户只能由系统管理员完成。

SQL Server 2005 在安装后自动建立了个特殊的 SQL  账 sa,即 System Administrator。该账户默认为是所有数据库的 dbo 用户(数据库所有者),具有最高权限, 可以进行任何操作,且不能被删除。刚安装完毕时,sa 没有密码,为了安全起见, 一定要为其加入密码。

在创建一个数据库时,SQL Server 2005 自动将创建该数据库的登录账户设置为该数据库的一个用户,并起名为dbo dbo 是数据库的拥有者,不能从数据库中删除,dbo对本数据库拥有所有操作权限,并可以将这些权限全部或部分授予其他数据库用户。另外,属于固定服务器角色 sysadmin  的成员也映射为所有数据库的 dbo

当一个登录者登录数据库服务器时,如果该服务器上的所有数据库都没有为其建立用 户账户,则该登录者只能访问那些具有 guest 用户的数据库。系统数据库 master tempdb  中的 guest用户不能被删除,而其他数据库中的 guest 用户可以被添加或删除。

3. 使用 T-SQL语句创建与管理登录账户

管理登录账户也可以使用T-SQL 语句,需要注意的是管理 Windows  身份验证的登录账户与 SQL Server 身份验证的登录账户所使用的系统存储过程不同。

1)管理 Windows 身份验证的登录账户

(1)向 Windows 账户授权的语法如下:

命令格式:

sp_grantlogin [@loginame=] 'login'

命令说明:

@loginame='login'指定一个名称为login Windows  2000   Server  /NT 用户或用户组名称,其格式为‘域\用户名'或'计算机名\用户名',@loginame可以省略。

(2)拒绝一个 Windows  账户登录的语法如下:

命令格式:

sp_denylogin  [@loginame=] 'login'

(3)删除一个 Windows  账户的语法如下:

命令格式:

sp_revokelogin [@loginame=] 'login'

2)管理 SQL Server 身份验证的登录账户

(1)使用系统存储过程创建SQL Server 登录账户。

命令格式:

sp_addlogin [@loginame=] 'login'

[ ,[@passwd=] 'password']

[ ,[@defdb=] 'database']

[ ,[@deflanguage=] 'language']

说明:

·login 为新建登录账户的名称。

·password  为密码,默认设置为 NULL

·database 为登录时的默认数据库。

·language 为默认语言。

全部按上述次序取值时,局部变量名称@loginame @passwd @defdb @deflanguage 可以省略。

(2)使用系统存储过程修改 SQL  Server 登录账户的密码。

命令格式:

sp_password

[ [@old=]'old_password',]

{ [@new=]'new_password'}

[ ,[@loginame=]'login']

说明:

·old_password 为旧的登录密码,其默认值为 NULL

 ·new_password 为新的登录密码,无默认值

 login 为需要更改密码的登录名,login必须已经存在。

(3)使用系统存储过程修改 SQL Server 登录账户的默认数据库。

命令格式:

sp_defaultdb [@loginame=]'login'[,@defdb=]'database'

说明:

database 是新的默认数据库的名称。

(4)使用系统存储过程修改 SQL Server 登录账户的默认语言。

命令格式:

sp_defaultlanguage [@loginame=]'login'[,@deflanguage=]'language'

说明:

language  是新的数据库默认语言。

(5)使用系统存储过程删除 SQL Server 登录账户。

命令格式:

sp_droplogin [@loginame=]'login'

4. 创建与管理数据库用户

拥有登录账户的用户能够通过 SQL Server身份验证,获得对 SQL Server 实例的访问权限。但如果要访问某个具体的数据库,还必须有一个用于控制在数据库中所执行活动 数据库用户账户。登录账户映射到数据库用户账户,就可以实现对数据库的访问了。 如果数据库中没有用户账户,则即使用户能够连接到 SQL Server 实例,也无法访问该数据库。

数据库用户是基于数据库的名称,是和登录账户相关联的。只有数据库所有者及数据库系统管理员才有创建和管理数据库用户的权力。

 SQL   Server 系统的每一个数据库中都有两个默认的用户账号 dbo   guest 

dbo 表示数据库的拥有者,拥有在数据库中执行所有操作的权力。

guest 是一个特殊的用户账号,它可以与任意在该数据库中没有对应用户账号的登录账号对应。

5. 使用 T-SQL 语句创建与管理数据库用户

(1)使用系统存储过程 sp_grantdbaccess 授权某个登录用户为当前数据库用户:

命令格式:

sp_grantdbaccess [@loginame=]'login'

[ ,[@name_in_db=]'name_in_db!]

说明:

Login 是登录用户名称。

name_in_db  是数据库中用户的名称,默认值为 NULL(使用login,  即使用登录用户名作为数据库的用户名)。

(2)使用系统存储过程 sp_revokedbaccess 删除某个登录用户的数据库用户: 

命令格式:

sp_revokedbaccess [@name_in_db=]'name'

说明:

name   是要删除的数据库用户名。

6. 创建和管理角色

使一个登录用户成为数据库用户只是授权的第一步,数据库管理员可以进一步为能够连接到自己所管理数据库的用户在该数据库上授予所需要的权限。数据库管理员单独管理数据库的每一个用户是一项非常繁杂的工作,如果将具有相同操作权限或相近操作权限的用户组织成组,则可以简化对用户的管理工作。也就是说,可以将在相同数据上具有相同权限的用户放入一个组中,然后对该组应用权限。

组是通过角色来实现的,可以将角色理解为组。对一个角色授予、拒绝或废除的权限也适用于该角色的任何成员。

SQL   Server系统可以创建一个角色,然后给这个角色授予适当的权限,来代表组中一类工作人员所执行的工作,当工作人员开始工作时,只需将其添加为该角色成员,当他们离开工作时,将他们从该角色中删除。而不必在每个人接受或离开工作时,反复授予、拒绝和废除其权限。权限在用户成为角色成员时自动生效,使用角色对用户进行分组管理有利于简化对用户的授权工作。

 SQL Server 2005 中,角色有两种:服务器角色和数据库角色服务器角色是服务器的一个对象,只能包含登录名数据库角色是数据库级的一个对象,数据库角色只能包含数据库用户名,而不能是登录名。

7. 使用 T-SQL 语句创建与管理数据库角色

1)创建用户定义的数据库角色

创建用户定义的数据库角色需要调用系统存储过程 sp_addrole,语法如下。

命令格式:

sp_addrole [@rolename=]'role'

[ ,[@ownername=]'owner]

说明: 

·role 表示要在当前数据库中创建的角色名称。

·owner  表示该角色的所有者,默认值为数据库的所有者 dbo

2)从当前数据库删除用户定义的角色

删除角色需要调用系统存储过程。

命令格式:

sp_droprole [@rolename=]'role'

说明:

role 为将要从当前数据库中删除的角色的名称。

3)为用户指定角色

使用系统存储过程 sp_addrolemember 数据库用户指定角色。

命令格式:

sp_addrolemember [@rolename=]'role',

@membername=]'user_account'

说明:

role 表示当前数据库中角色名称。

user_account 是添加到角色的用户名称,没有默认值。

4)取消用户的角色

如果 一个用户不再担当某个角色,可以取消用户的角色,使用系统存储过程sp_droprolemember  取消数据库用户的角色。

命令格式:

sp_droprolemember [@rolename=]'role',

[@membername =]'user_account'

说明:

·role 表示当前数据库中角色名称,将要从该角色中删除用户。

·user_account 要取消角色的用户名称,没有默认值。

8. 权限管理

一个登录者若要对某个数据库进行修改或访问,必须具有相应的权限,这种权限涉及服务器级与数据库级的操作。权限既可以直接获得,也可以通过成为角色成员而继承角色的权限。

权限的种类分为3种:对象权限、语句权限和隐含权限。

1)对象权限

对象权限指对已存在的数据库对象的操作权限,包括对数据库对象的 SELECT, INSERT UPDATE DELETE  EXECUTE   权限。

2)语句权限

语句权限用于创建数据库或数据库对象所涉及的活动。

3)隐含权限

隐含权限控制那些只能由固定角色的成员或数据库对象所有者执行的活动。

9. 使用 T-SQL 语句管理权限

权限管理指对于用户或角色的某些操作赋予允许权限、拒绝权限以及废除权限。 首先介绍使用 T-SQL 语句管理权限的方法。

(1)允许权限(GRANT):    表示用户或角色能够执行某项操作。

(2)拒绝权限(DENY):   表示用户或角色不能执行某项操作,也称禁止权限。

(3)废除权限(REVOKE):   表示废除以前用户或角色所具有的允许权限或拒绝权限。 

1)语句权限的管理

使用 T-SQL  允许、拒绝或废除语句权限的语法如下:

命令格式:

GRANT | DENY | REVOKE (ALL | statement [,…n]) TO security_account[,…h]

说明:

·GRANT 、DENY 、REVOKE 分别表示允许、拒绝和废除语句权限的操作。

·ALL 表示针对所有语句权限的设置,只有 sysadmin 成员有权使用ALL

·statement 表示被允许、拒绝或废除语句权限的语句,包括9个语句: CREATE DATABASE CREATE DEFAULT CREATE FUNCTION 

CREATE PROCEDURE CREATE RULE CREATE TABLE CREATE VIEW 

BACKUP DATABASEBACKUP LOG。

·[,…n ] 表示同时可以处理多个语句的权限。

·security_account 表示当前数据库内将要被设置权限的登录账户、数据库用户或角色。 

2)对象权限的管理

使 用 T-SQL  允许、禁止或废除对象权限的语法如下:

命令格式:

GRANT | DENY | REVOKE

{ ALL [ PRIVILEGES ] | permission [,…n ] }

{ [ (column [,…n] ) ] ON { table | view }

  |ON { table | view } [ ( column [,…n] ) ]

  |ON { stored_procedure | extended_procedure }

  |ON { user_defined_function }

}

TO security_account [,…n ]

说明:

·GRANT DENY REVOKE    分别表示允许、禁止或废除对象权限。

·ALL 表示允许、禁止或废除所有适用的权限。只有 sysadmin db_owner 成员及数据库拥有者有权使用ALL

·PRIVILEGES 是与 SQL-92  标准兼容而列出的可选关键字,可以省略。

·permission 表示允许、禁止或废除的对象权限。例如 SELECT、INSERT  等 。

·[ ( column [,…n] ) ] ON { table l view } | ON { table | view } [ ( column [,…n] ) ]表示上述权限的作用对象,可以是表或视图,也可以是表或视图的某一列或几列。可以使用 “|”两边的任意一种书写格式。

·stored_procedure 、extended_procedure 、user_defined_function 分别表示在当前数据

库中设置权限的存储过程名、扩展存储过程名、用户定义函数名。

·TO 指定安全账户列表,对于 REVOKE 语句,可以改用FROM

·security_account 表示当前数据库内将要允许、禁止或废除权限的安全账户,可以是 SQL   Server 账户、角色、Windows 用户或组。

 SQL  Server 管理平台中管理语句权限与对象权限的方法不同,语句权限是在数据库一级进行管理,对象权限是在数据库对象一级进行管理。