11. SQL—数据库安全
Posted 江湖@小小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11. SQL—数据库安全相关的知识,希望对你有一定的参考价值。
文章目录
1. 流行的数据库产品与安全
1. MicroSoft FoxPro 数据库管理系统
是一个非常强大的基于单用户环境的数据库管理系统,
它只使用了有限的 SQL 标准的子集,
在该数据库系统中没有提供安全性措施,
同时它使用了 Xbase 的文件格式,
每一个文件中都只有一个表,
索引文件存储于单独的表中.
2. MicroSoft Access 数据库管理系统
提供了更多的 SQL 实现,
尽管它内部已经包括了基本的安全系统,
但它仍然是一个基于 PC 平台的数据库管理系统,
该数据库系统允许你创建查询并把它们存储在数据库之中,
此外,
全部的数据库及其对象均存在于同一个文件之中.
3. Oracle 7 数据库管理系统
支持全部的标准的 SQL ,
此外,
它还对标准的 SQL 进行了称之为 PL*SQL 的扩充,
它拥有全部的安全特性,
包括在数据库中创建角色以及为数据库对象分配权限的能力.
4. Sybase SQL
拥有与 Oracle 7 类似的能力与特性,
它也提供了极大范围内的安全特性,
它对 SQL 的扩充被称为 Transact-SQL.
2. 如何让一个数据库变得安全?
规划数据库系统的安全性应该考虑的问题:
1.谁应该得到数据库管理员权限?
2.有多少用户需要访问数据库系统?
3.每个用户应该得到什么样的权限与角色?
4.当一个用户不再访问数据库时应该如何去删除它?
3. Personal Oracle7 与安全
1. 创建用户语法:
CREATE USER user
IDENTIFIED {BY password | EXTERNALLY}
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA {integer [K|M] | UNLIMITED} ON tablespace]
[PROFILE profile]
2. CREATE USER Bryan IDENTIFIED BY CUTIGER;
分析:
每次我登录进行系统的名字是 Bryan;
我会被要求输入密码 GUTIGER;
3. ALTER USER 语法:
ALTER USER user
[IDENTIFIED {BY password | EXTERNALLY}]
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA {integer [K|M] | UNLIMITED} ON tablespace]
[PROFILE profile]
[DEFAULT ROLE { role [, role] ...
| ALL [EXCEPT role [, role] ...] | NONE}]
注:
你可以使用该命令来改变所有的用户选项,
包括密码和配置文件,
例如:
如果想改变 Bryan 的密码,
你可以用下边的语句:
ALTER USER Bryan
IDENTIFIED BY ROSEBUD;
User altered;
如果想改变默认的表空间,可以用下边的语句:
ALTER USER RON
DEFAULT TABLESPACE USERS;
User altered;
使用 DROP USER 命令,即删除一个用户:
DROP USER user_name [CASCADE];
4. 创建角色
角色是允许用户在数据库中执行特定功能的一个或一组权限。
将角色应用于用户的语法如下:
GRANT role TO user [WITH ADMIN OPTION];
如果你使用了 WITH ADMIN OPTION 选项,
那么该用户可以为其它用户赋予权限.
如果想删除角色 可以使用 REVOKE 命令:
REVOKE role FROM user;
ORACLE 可以让你用下边的三个角色之一进行注册:
1. Connect
你可以将 Connect 角色理解为登录级角色,
被赋予该角色的用户可以登录进入系统并做允许他/她们做的工作.
Connect 角色允许用户从表中插入 更新 删除属于其它用户的记录 在取得了适当
的许可权限以后 用户也可以创建表、视图、序列、簇和同义词.
GRANT CONNECT TO Bryan;
删除角色:
REVOKE CONNECT FROM Bryan;
2. Resource
该角色允许用户对 ORACLE 数据库进行更多的访问,
除了可以赋予 Connect 角色的权限以外,
它还有创建过程,
触发机制和索引的权限.
GRANT RESOURCE TO Bryan;
删除角色:
REVOKE RESOURCE FROM Bryan;
3. DBA(数据库管理员)
DBA 角色包括了所有的权限,
赋予了该角色的用户可以在数据库中做他们想做的任何事,
为了保证系统的完整性你应该将具有该角色的用户数量保持在仅有的少数几个上.
GRANT DBA TO Bryan;
注:
如果你有适当的权限,
你可以创建你自己的角色,
为你的角色赋予权限,
然后将角色应用于你的用户以取得更高的安全性.
5. 用户使用视图的权利
允许系统中的所有用户都具有在自己的模块中
创建视图和访问视图的能力:
GRANT CREATE VIEW TO PUBLIC;
分析:
PUBLIC 关键字的意思就是每个人都有创建视图的权利,
很明显,
系统权限允许受权人访问几乎全部的系统的设置,
所有系统权限只应只能给予特定的人或需要使用系统权限的人.
6. 从建表到角色授权
1. 创建表
CREATE TABLE SALARIES
(
NAME CHAR(30),
SALARY NUMBER,
AGE NUMBER
);
2. 创建用户 Jack 和 Jill
create user Jack identified by Jack;
create user Jill identified by Jill;
3. 分配角色
grant connect to Jack;
grant resource to Jill;
4. 由于 JACK 的角色了 Connect ,
所以你只想让他有使用 SELECT 语句的权利
GRANT SELECT ON SALARIES TO JACK;
5. 因为 JILL 的角色为 Resource,
你允许他对表进行选择和插入一些数据,
或是严格一些,
允许 JILL 修改 SALARIES 表中 SALARY 字段的值.
GRANT SELECT, UPDATE(SALARY) ON SALARIES TO Jill;
7. 使用表时的限制
这里需要说明一下,你在创建表的时候所使用的用户名假定为 Byran,当 JACK 想从 SALARIES 表中选择数据库,他必须使用该用户名。
SELECT * FROM Bryan.SALARIES;
8. 使用 WITH GRANT OPTION 子句
当在给对象授权时如果使用了 WITH GRANT OPTION 这个选项,
那么该权限就可以被传给其他的用户
GRANT SELECT, UPDATE(SALARY)
ON Bryan.SALARIES TO JILL
WITH GRANT OPTION
以上是关于11. SQL—数据库安全的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 上为连接、限制、选择等(不是条件)的 SQL 片段安全地转义字符串
SQL Server安全(6/11):执行上下文与代码签名(Execution Context and Code Signing)