Oracle用户授权篇
Oracle用户授权篇
系统权限
在Oracle数据库中,用户 SYSTEM、SYS 是数据库管理员,它具有DBA所有系统权限。在Oracle 11g 中有206个系统权限,可以在字典表 SYSTEM_PRIVILEGE_MAP
中查到。
在数据库中要进行某一种操作时,用户必须具有相应的系统权限,系统权限是由数据库管理员为用户授予的。
在创建用户后,如果没有给用户授予相应的系统权限,则用户不能连接到数据库,因为该用户缺少创建会话的权限。向用户授予权限的语句为 GRANT,其语法格式为:
GRANT 系统权限 TO {PUBLIC | role | username} [WITH ADMIN OPTION]
WITH ADMIN OPTION 选项:表示该用户可以将其所有权限再授权给其他用户,也可以将权限再收回。
PUBLIC :表示将该权限授予数据库中全体用户。
role :给指定某一角色授权。
username :给指定用户授权。
常见的系统权限:
权限 | 功能 |
---|---|
CREATE SESSION | 允许用户登录到数据库。 |
CREATE TABLE | 允许用户创建表。 |
CREATE VIEW | 允许用户创建视图。 |
CREATE INDEX | 允许用户创建索引。 |
CREATE PROCEDURE | 允许用户创建存储过程。 |
SELECT ANY TABLE | 允许用户查询任意表。 |
ALTER ANY TABLE | 允许用户修改任意表。 |
DROP ANY TABLE | 允许用户删除任意表。 |
SYSDBA | 系统管理员权限 |
SYSOPER | 系统操作员权限 |
举例:
--将系统管理员权限授予zhangsan用户
GRANT sysdba To zhangsan;
--授予stu用户 登录、连接的系统权限
GRANT create session TO stu;
收回权限:
REVOKE sysdba FROM zhangsan;
REVOKE create session FROM stu;
对象权限
对象权限是用户之间的表、视图、序列等模式对象的相互存取操作的权限。对属于某一用户模式的所有模式对象,该用户对这些模式对象具有全部的对象权限,也就是说模式的拥有者对模式中的对象具有全部对象权限。同时,模式的拥有者还可以将这些对象权限授予其他用户。
使用 GRANT 语句可以将对象权限授予指定的用户、角色、PUBLIC 公共用户组其语法格式如下:
GRANT [object_privilege | ALL [PRIVILEGES]] ON [schema.]object TO {user| role| PUBLIC}
Oracle 对象权限有很多种,以下是一些常见的对象权限:
权限 | 功能 |
---|---|
SELECT | 允许用户查询指定表或视图的数据。 |
INSERT | 允许用户向指定表格中插入新纪录。 |
UPDATE | 允许用户修改指定表格中已经存在的记录。 |
DELETE | 允许用户从指定表格中删除记录。 |
EXECUTE | 允许用户执行存储在数据库中的过程、函数和包。 |
CREATE | 允许用户创建指定类型的对象,例如表、视图等。 |
DROP | 允许用户删除指定类型的对象,例如表、视图等。 |
ALTER | 允许用户修改指定类型的对象,例如表、视图等。 |
REFERENCES | 允许用户创建外键约束,引用其他表的主键。 |
INDEX | 允许用户创建指定表的索引。 |
ALL | 代表授予所有对象权限。 |
举例:
--将表table_name的增删查改权限授予stu
GRANT select,insert,update,delete ON table_name TO stu;
--将该用户对表table_name的所有权限授予stu
GRANT all ON table_name to stu;
--将该用户拥有的所有权限授予stu
GRANT all to stu;
收回权限:
REVOKE SELECT ON table_name FROM user_name;
REVOKE insert,update,delete ON table_name FROM stu;
角色权限
为简化权限管理,Oracle 引入了角色概念,角色是相关权限的命名集合,使用角色的主要目的是为了简化权限管理。
可以使用角色为用户授权,同样也可以从用户中回收角色。由于角色集合了多种权限,所以当为用户授予角色时,相当于为用户授予了多种权限。这样就避免了向用户逐一授权,从而简化了用户权限的管理。
在为用户授予角色时,既可以向用户授予系统预定义的角色,也可以自己创建角色然后再授予用户。
在创建角色时,可以为角色设置应用安全性。角色的应用安全性是通过为角色设置密码进行保护的,只有提供正确的密码才能允许修改或设置角色。
可通过查询数据字典 DBA_ROLES 获取数据库中的全部角色信息。
Oracle 数据库中有很多预定义角色,可以通过授予这些角色来管理数据库中的对象和用户的权限。所谓预定义角色就是安装数据库之后就存在的角色。常见的一些预定义角色:
角色 | 权限 |
---|---|
CONNECT | 该角色对于一个基本的数据库用户而言是必需的。该角色允许用户连接到数据库并创建其自己的对象。 |
RESOURCE | 该角色将授予用户创建一些对象(如表、视图和序列)以及执行相应的 ALTER、DROP 和 INDEX 操作的权限。 |
DBA | 全称为 Database Administrator,该角色是数据库的超级管理员,拥有最高的权限。 |
举例:
-- 创建内部管理员账号密码;
create user hydb identified by oracle;
--将dba权限授权给内部管理员账号和密码;
grant connect,resource,dba to hydb;
权限撤销
要收回对象的权限,可以使用 REVOKE 关键字和适当的语法来执行。以下是 REVOKE 收回对象权限的一般语法:
REVOKE privilege_name [, privilege_name2, ...]
ON object_name
FROM user_name [, user_name2, ...]
[CASCADE CONSTRAINTS];
具体的解释如下:
REVOKE
:关键字,表示要执行撤销权限的操作。privilege_name
:要收回的权限名称,可以是单个权限或多个权限以逗号分隔。ON object_name
:指定要撤销权限的对象名称,可以是表、视图、存储过程等。FROM user_name
:指定要从其中收回权限的用户或角色名称,可以是单个用户或角色,也可以是多个以逗号分隔。[CASCADE CONSTRAINTS]
:可选项,用于指定是否级联撤销关联对象的权限,比如删除表的 SELECT 权限时,同时也会撤销对该表的视图权限。
以下是一个示例,展示如何撤销表的 SELECT 权限:
REVOKE SELECT ON table_name FROM user_name;
上述语句将从指定的用户或角色(user_name)中撤销对指定表(table_name)的 SELECT 权限。
日常用到的权限
在Oracle数据库中,用户可以被授予不同的权限来限制其对数据库对象的访问和操作权限。以下是常见的Oracle用户权限或角色:
- CONNECT:允许用户连接到数据库实例。
- RESOURCE:允许用户创建、编辑和删除大多数数据库对象,如表、视图、序列、索引、程序包等。
- DBA:具有完全的数据库管理员权限,可以执行对数据库实例的所有操作,包括创建和删除用户、备份和恢复数据库、更改数据库结构等。
- CREATE SESSION:允许用户通过网络建立与数据库的会话。
- CREATE TABLE:允许用户创建新表。
- CREATE VIEW:允许用户创建新视图。
- CREATE PROCEDURE:允许用户创建新存储过程。
- CREATE TRIGGER:允许用户创建新触发器。
- GRANT:允许用户授予自己拥有的权限给其他用户。
- SELECT、INSERT、UPDATE、DELETE:允许用户对特定表执行对应的查询、插入、更新和删除操作。
- CREATE DATABASE LINK:创建数据链接(DBLink)的权限。