» 游客:  注册 | 登录 | 会员 | 统计 | 帮助
斑竹的菜园子
 

作者:
标题: 数据库的安全 上一主题 | 下一主题
borneol
管理员




积分 10952
发贴 955
注册 2005-2-23
来自 重庆
状态 离线
#1  数据库的安全

对数据库的安全,有些数据库设计人员利用 Interbase 的 GRANT 和 REVOKE 的授予和回收命令,在数据库服务器来进行数据库的维护;而有些人员则直接在设计数据库时增加一个存储用户姓名、使用级别、密码、使用期限等用户信息的表,客户端在访问数据库时,通过用户信息表里的设定来决定用户的访问级别。

以上两种方法有各有各的好处,第一种可以减少编程人员的工作量,让程序员可以绕开访问权限的问题,将主要的精力放于程序其它方面,但这要求数据维护及管理人员对数据库服务器的安全机制有较熟练的认识。第二种会增加程序的设计难度,因它将安全机制交给了编程人员,好处是程序一但编好,“无需”维护人员,可实现真正的“零”维护。最多只需更改一下SYSDBA用户的系统默认密码。这比较适合那些“远程”地为他方开发数据库软件的人。

因我在此讨论的主要是Intrbase数据库,不侧重编程问题,所以下面我将对 Interbase 的 GRANT 和 REVOKE 命令进行说明。

先看看 GRANT 命令的语法:

GRANT <privileges> ON [TABLE] {tablename | viewname}
TO {<object> | <userlist> | GROUP UNIX_group}
| EXECUTE ON PROCEDURE procname TO {<object> | <userlist>}
| <role_granted> TO {PUBLIC | <role_grantee_list>};
<privileges> = {ALL [PRIVILEGES] | <privilege_list>}

<privilege_list> = SELECT
| DELETE
| INSERT
| UPDATE [(col [, col )]
| REFERENCES [(col [, col )]

[, <privilege_list>
<object> = PROCEDURE procname
| TRIGGER trigname
| VIEW viewname
| PUBLIC
[, <object>
<userlist> = [USER] username
| rolename
| Unix_user}
[, <userlist>
[WITH GRANT OPTION]
<role_granted> = rolename [, rolename

<role_grantee_list> = [USER] username [, [USER] username

[WITH ADMIN OPTION]

从上面的语法我们可以提取出:

一:Interbase支持如下的访问权限:

可授予的权限 描 述
SELECT 可读取数据
DELETE 可删除数据
INSERT 可增加(插入)数据
UPDATE 可修改数据
ALL 可读取、删除、增加、修改数据,也可调用执行存储过程
EXECUTE 用于调用执行存储过程

二:被授权的有:

1:数据表
2:视图
3:存储过程

【注】在对视图授予DELETE、INSERT、UPDATE的权限时,那么视图中所引用的数据表也必需享有其对应的权限。在前面的《创建视图》一文中,我列出了创建视图的语法,其中有一个[WITH CHECK OPTION]可选项,在此时,就可以派上用场了,因此,在创建视图时,我们用WITH CHECK OPTION选项,就可透过视图见到待编辑的字段了。

如我们要把FINANCE表的SELECT和UPDATE权限授予给用户TIM,可书写成如下语句:
GRANT SELECT,UPDATE ON FINANCE TO TIM;

再如我们要使存储过程PROC_ADD_PHONEBOOK能够被TIM,HOWARD调用,可以写成:
GRANT EXECUTE ON PROC_ADD_PHONEBOOK TO TIM,HOWARD;

 

 

相对于GRANT,Interbase提供了REVOKE命令,用于收回授于用户的权限。语法如下:


REVOKE [GRANT OPTION FOR] <privileges> ON [TABLE]
{tablename | viewname}
FROM {<object> | <userlist> | <rolelist> | GROUP UNIX_group}
| EXECUTE ON PROCEDURE procname
FROM {<object> | <userlist>}
| <role_granted> FROM {PUBLIC | <role_grantee_list
>}};
<privileges> = {ALL [PRIVILEGES] | <privilege_list>}

<privilege_list> = {
SELECT
| DELETE
| INSERT
| UPDATE [(col [, col)]
| REFERENCES [(col [, col)]

[, <privilege_list>}}
<object> ={
PROCEDURE procname
| TRIGGER trigname
| VIEW viewname
| PUBLIC
[, <object>]}
<userlist> = [USER] username [, [USER] username
<rolelist> = rolename [, rolename]
<role_granted> = rolename [, rolename
<role_grantee_list> = [USER] username [, [USER] username

可以看出,和GRANT命令没什么区别,只是将GRANT命令中的TO在REVOKE中改为FROM即可,无需再做其它的说明。

同样,我们要把上面FINANCE表的SELECT和UPDATE权限从用户TIM那儿收回,可书写成如下语句:
REVOKE SELECT,UPDATE ON FINANCE FROM TIM;



0200 1D 06 00 00 A0 86 01 00 FF FF 00 00 1E 06 00 00
         E-mail:webmaster@chenzhang.com
         MSN:borneol_net@hotmail.com
         Home page:www.chenzhang.com
0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2005-3-10 14:39
查看资料  发送邮件  访问主页  发短消息  QQ   编辑帖子  引用回复


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: