紫色代表一级目录
粉红代表二级目录
蓝色代表三级目录
红色代表关键字
橙色代表说明
数据库安全
数据库安全就是保护数据不受到未授权访问。
权限
权限是用于访问数据库本身、访问数据库里的对象、操作数据库里的数据、在数据库里执行各种管理功能的许可级别。权限是通过GRANT命令分配的,用REVOKE命令撤销。
系统权限
系统权限允许用户在数据库里执行管理操作,比如创建数据库、删除数据库、创建用户账户、删除用户、删除和修改数据库对象、修改对象的状态、修改数据库的状态以及其他会对数据库造成重要影响的操作。
下面是SQL Server里一些常见系统权限:
CREATE DATABASE——允许建立新的数据库;
CREATE PROCEDURE——允许建立新的存储过程;
CREATE VIEW——允许建立新的视图;
BACKUP DATABASE——允许用户对数据库进行备份;
CREATE TABLE——允许用户建立新表;
CREATE TRIGGER——允许用户在表上建立触发器;
EXECUTE——允许用户在特定数据库中运行给定的存储过程。
下面是Oracle里一些常见系统权限:
CREATE TABLE——允许用户在特定规划中建立新表;
CREATE ANY TABLE——允许用户在任意规划中建立新表;
ALTER ANY TABLE——允许用户在任意规划中修改表结构;
DROP TABLE——允许用户在特定规划中删除表对象;
CREATE USER——允许用户创建其他用户账户;
DROP USER——允许用户删除既有用户账户;
ALTER USER——允许用户修改既有用户账户;
ALTER DATABASE——允许用户修改数据库特性;
BACKUP ANY TABLE——允许用户备份任意规划中任意表的数据;
SELECT ANY TABLE——允许用户查询任意规划中任意表的数据。
下面是MySQL里一些常见的全局(系统)权限:
CREATE——允许用户创建特定对象,如数据库、表或索引;
DROP——允许用户删除特定对象;
GARNT——允许用户对特定对象分配权限;
RELOAD——允许用户进行清除缓存操作,以便清除缓存中的日志文件等内容;
SHUTDOWN——允许用户关闭MySQL实例。
对象权限
对象权限是针对对象的许可级别,意味着必须具有适当的权限才能对数据库对象进行操作。
ANSI标准里包含下述对象权限。
USAGE:批准使用指定的域。
SELECT:允许访问指定的表。
INSERT(column_name):允许对数据插入到指定表的指定字段。
INSERT:允许对数据插入到指定表的全部字段。
UPDATE(column_name):允许对指定表里的指定字段进行更新。
UPDATE:允许对指定表里的全部字段进行更新。
REFERENCES(column_name):允许在完整性约束里引用指定表里的指定字段,任何完整性约束都需要这个权限。
REFERENCES:允许引用指定表里的全部字段。
对象的所有者自动被授予与对象相关的全部权限。有些SQL实现里还可以利用GRANT OPTION命令分配这些权限。
控制用户访问
用户访问主要是通过用户账户和密码进行控制的,但在大多数主流实现里,这是不足以访问数据库的。
GRANT命令
语法:
例:
GRANT OPTION是个功能强大的GRANT选项。当对象的所有者利用GRANT OPTION把自己对象的权限授予另一个用户时,这个用户还可以把这个对象的权限授予其他用户,尽管他并不是这个对象的所有者。
使用ADMIN OPTION授予权限之后,用户不仅拥有了权限,也具有了把这个权限授予其他用户的能力,这一点与GRANT OPTION类似。但GRANT OPTION用于对象级权限,而ADMIN OPTION用于系统级权限。当一个用户用ADMIN OPTION向另一个用户授予系统权限之后,后者还可以把系统权限授予其他用户。
REVOKE
当一个被使用GRANT OPTION或ADMIN OPTION授予了权限的用户被删除之后,权限与用户之间的关联也被断开了。
语法:
例:
控制对单独字段的访问
数据库账户PUBLIC
数据库账户PUBLIC是个代表数据库里全体用户的账户。所有用户都属于PUBLIC账户。如果某个权限被授予PUBLIC账户,那么数据库全部用户都具有这个权限。类似地,如果一个权限从PUBLIC上撤销,就相当于从全部数据库用户上撤销了这个权限,除非这个权限明确地授予了特定用户。
例:
权限组
Oracle在其实现里包含以下权限组:
CONNECT——允许用户连接数据库,并且对已经访问过的任何数据库对象进行操作。
RESOURCE——允许用户创建对象、删除其所拥有的对象、为其所拥有的对象赋予权限等。
DBA——允许用户在数据库中对任何对象进行任何操作。
通过角色控制权限
角色是数据库里的一个对象,具有类似权限组的特性。通过使用角色,我们不必明确地直接给用户授予权限,从而减少安全维护工作。使用角色可以更方便地进行组权限管理。角色的权限可以被修改,而这种修改对于用户来说是透明的。
CREATE ROLE语句
角色是由CREATE ROLE语句创建的
语法:
DROP ROLE语句
这个语句用于删除角色
语法:
SET ROLE语句
使用SET ROLE语句可以为用户的SQL会话设置角色
语法: