目录
----------------------------------------------分割线---------------------------------------------------------
1.用户的创建
在Oracle中默认有3个用户:SYS,SYSTEM,SCOTT
其中数据库所有的数据字典表和视图都存储在SYS模式中,相当于Linux下的root用户。模式和用户可以认为是同一个概念。
SYSTEM是默认的系统管理员,可以管理表和视图、用户、权限等
SCOOT是默认的普通用户,以Oracle公司的第一个普通员工命名的,默认密码是tiger,刚开始这个用户是被锁住的,无法用该用户登录。
刚开始都是以SYS或者SYSTEM登录。来创建普通用户:
drop user voapd;
create user voapd identified by voapd;
--create user [用户名] identified by [密码] Default tablespace [默认表空间名] Temporary tablespace [临时表空间名]
创建完后可尝试登录新创建的用户:
发现刚创建的用户没有创建会话的权限,需要被授予相应的权限。授予voapd创建会话权限和解除scott锁定:
revoke CREATE SESSION from voapd;
grant CREATE SESSION to voapd with admin option;
--GRANT [权限] TO [用户] [WITH ADMIN OPTION]
alter user scott account unlock;
之后就可以登录voapd用户 和scott用户了,第一次登录scott用户,会叫你重置密码。with admin option 表示被授予系统权限的用户,可以继续有权利授予其他用户相应的权限。
2.用 Profile(概要文件) 管理用户:
Profile文件里包含了16个用于管理用户的规则和值,包含了"登录几次失败就会把用户给锁定","锁定的天数为多少天",像这样的参数信息。每个用户都会关联一个Profile文件,然后用户就会遵循Profile里的规则。当没有指定的Profile或者指定的Profile文件被删除时,用户关联的默认概要文件就为DEFAULT。
select * from dba_profiles 可以查看profile信息。 dba_users可以查看用户信息,里面可以找到用户关联的Profile文件。(UNLIMITED指无穷大)
PROFILE参数解释如下:
COMPOSITE_LIMIT | 指定一个会话的总的资源消耗,以service units单位表示。Oracle数据库以有利的方式计算 |
PASSWORD_LOCK_TIME | 指定登陆尝试失败次数到达后帐户的锁定时间,以天为单位。 |
PASSWORD_VERIFY_FUNCTION | 密码验证脚本. |
PASSWORD_REUSE_MAX | 允许使用历史密码作为新密码的间隔次数 |
PASSWORD_REUSE_TIME | 允许使用历史密码作为新密码的间隔天数 |
PASSWORD_LIFE_TIME | 指定同一密码所允许使用的天数 |
FAILED_LOGIN_ATTEMPTS | 密码登录失败次数,超过则锁定用户 |
PRIVATE_SGA | SGA共享池可以给会话分配的最大字节 |
CONNECT_TIME | 会话的总连接时间(分钟) |
IDLE_TIME | 会话的连续不活动的时间。 |
LOGICAL_READS_PER_CALL | 指定一次执行SQL(解析、执行和提取)调用所允许读的数据块的最大数目。 |
LOGICAL_READS_PER_SESSION | 指定一个会话允许读的数据块的数目,包括从内存和磁盘读的所有数据块。 |
CPU_PER_CALL | 指定一次调用(解析、执行和提取)的CPU时间限制,单位为百分之一秒 |
CPU_PER_SESSION | 指定会话的CPU时间限制,单位为百分之一秒 |
SESSIONS_PER_USER | 指定限制用户的并发会话的数目。 |
PASSWORD_GRACE_TIME | 密码失效的宽限天数 |
创建Profile ,关联profile 的示例: 让用户登录3次失败就永久锁定,用户的密码有效期只有30天,宽限时间为3天。
--drop profile testProfile CASCADE;
create profile testProfile limit
failed_login_attempts 3
password_lock_time unlimited;
alter profile testProfile limit
PASSWORD_LIFE_TIME 30
PASSWORD_GRACE_TIME 3;
alter user voapd Profile testProfile;
然后登录voapd,连续试错3次密码就真的永久锁定了。登录SYSTEM用户,用alter user [用户名] account unlock;解除锁定。此外,必须没有用户关联到这个profile时才能直接删除,否则要加级联CASCADE。级联删除prifile会把原来关联到此profile用户 关联回默认的概要文件DEFAULT.
3.系统权限
GRANT [权限] TO [用户] [WITH ADMIN OPTION] ;
revoke[权限] from [用户];
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
另外还有 当权限名带有 any时,表示该权限可以操作任意对象。例如 create table 是创建表的权限,create any table 则是拥有创建任意对象的表权限,假如A被授予了这个权限,那么A也可以创建B中表的权限。
系统权限指允许用户对数据库进行哪些操作,可以 select * from system_privilege_map; 查询系统权限有哪些。这里抄这位仁兄的表格了https://blog.csdn.net/weixin_30847939/article/details/95212667?ops_request_misc=%7B%22request_id%22%3A%22158229177819195239837236%22%2C%22scm%22%3A%2220140713.130056874..%22%7D&request_id=158229177819195239837236&biz_id=0&utm_source=distribute.pc_search_result.none-task
类型/系统权限 | 说明 |
群集权限 | |
CREATE CLUSTER | 在自己的方案中创建、更改和删除群集 |
CREATE ANY CLUSTER | 在任何方案中创建群集 |
ALTER ANY CLUSTER | 在任何方案中更改群集 |
DROP ANY CLUSTER | 在任何方案中删除群集 |
数据库权限 | |
ALTER DATABASE | 运行ALTER DATABASE语句,更改数据库的配置 |
ALTER SYSTEM | 运行ALTER SYSTEM语句,更改系统的初始化参数 |
AUDIT SYSTEM | 运行AUDIT SYSTEM和NOAUDIT SYSTEM语句,审计SQL |
AUDIT ANY | 运行AUDIT和NOAUDIT语句,对任何方案的对象进行审计 |
索引权限 | |
CREATE ANY INDEX | 在任何方案中创建索引 注意:没有CREATE INDEX权限,CREATE TABLE权限包含了CREATE INDEX权限 |
ALTER ANY INDEX | 在任何方案中更改索引 |
DROP ANY INDEX | 任何方案中删除索引 |
过程权限 | |
CREATE PROCEDURE | 在自己的方案中创建、更改或删除过程、函数和包 |
CREATE ANY PROCEDURE | 在任何方案中创建过程、函数和包 |
ALTER ANY PROCEDURE | 在任何方案中更改过程、函数和包 |
DROP ANY PROCEDURE | 在任何方案中删除过程、函数或包 |
EXECUTE ANY PROCEDURE | 在任何方案中执行或者引用过程 |
概要文件权限 | |
CREATE PROFILE | 创建概要文件 |
ALTER PROFILE | 更改概要文件 |
DROP PROFILE | 删除概要文件 |
角色权限 | |
CREATE ROLE | 创建角色 |
ALTER ANY ROLE | 更改任何角色 |
DROP ANY ROLE | 删除任何角色 |
GRANT ANY ROLE | 向其他角色或用户授予任何角色 注意:没有对应的REVOKE ANY ROLE权限 |
回退段权限 | |
CREATE ROLLBACK SEGMENT | 创建回退段 注意:没有对撤销段的权限 |
ALTER ROLLBACK SEGMENT | 更改回退段 |
DROP ROLLBACK SEGMENT | 删除回退段 |
序列权限 | |
CREATE SEQLENCE | 在自己的方案中创建、更改、删除和选择序列 |
CREATE ANY SEQUENCE | 在任何方案中创建序列 |
ALTER ANY SEQUENCE | 在任何方案中更改序列 |
DROP ANY SEQUENCE | 在任何方案中删除序列 |
SELECT ANY SEQUENCE | 在任何方案中从任何序列中进行选择 |
会话权限 | |
CREATE SESSION | 创建会话,登录进入(连接到)数据库 |
ALTER SESSION | 运行ALTER SESSION语句,更改会话的属性 |
ALTER RESOURCE COST | 更改概要文件中的计算资源消耗的方式 |
RESTRICTED SESSION | 在数据库处于受限会话模式下连接到数据 |
同义词权限 | |
CREATE SYNONYM | 在自己的方案中创建、删除同义词 |
CREATE ANY SYNONYM | 在任何方案中创建专用同义词 |
CREATE PUBLIC SYNONYM | 创建公共同义词 |
DROP ANY SYNONYM | 在任何方案中删除同义词 |
DROP PUBLIC SYNONYM | 删除公共同义词 |
表权限 | |
CREATE TABLE | 在自己的方案中创建、更改和删除表 |
CREATE ANY TABLE | 在任何方案中创建表 |
ALTER ANY-TABLE | 在任何方案中更改表 |
DROP ANY TABLE | 在任何方案中删除表 |
COMMENT ANY TABLE | 在任何方案中为任何表、视图或者列添加注释 |
SELECT ANY TABLE | 在任何方案中选择任何表中的记录 |
INSERT ANY TABLE | 在任何方案中向任何表插入新记录 |
UPDATE ANY TABLE | 在任何方案中更改任何表中的记录 |
DELETE ANY TABLE | 在任何方案中删除任何表中的记录 |
LOCK ANY TABLE | 在任何方案中锁定任何表 |
FLASHBACK ANY TABLE | 允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询 |
表空间权限 | |
CREATE TABLESPACE | 创建表空间 |
ALTER TABLESPACE | 更改表空间 |
DROP TABLESPACE | 删除表空间,包括表、索引和表空间的群集 |
MANAGE TABLESPACE | 管理表空间,使表空间处于ONLINE(联机)、OFFLINE(脱机)、BEGIN BACKUP(开始备份)、END BACKUP(结束备份)状态 |
UNLIMITED TABLESPACE | 不受配额限制地使用表空间 注意:只能将UNLIMITED TABLESPACE授予账户而不能授予角色 |
用户权限 | |
CREATE USER | 创建用户 |
ALTER USER | 更改用户 |
BECOME USER | 当执行完全装入时,成为另一个用户 |
DROP USER | 删除用户 |
视图权限 | |
CREATE VIEW | 在自己的方案中创建、更改和删除视图 |
CREATE ANY VIEW | 在任何方案中创建视图 |
DROP ANY VIEW | 在任何方案中删除视图 |
COMMENT ANY TABLE | 在任何方案中为任何表、视图或者列添加注释 |
FLASHBACK ANY TABLE | 允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询 |
触发器权限 | |
CREATE TRIGGER | 在自己的方案中创建、更改和删除触发器 |
CREATE ANY TRIGGER | 在任何方案中创建触发器 |
ALTER ANY TRIGGER | 在任何方案中更改触发器 |
DROP ANY TRIGGER | 在任何方案中删除触发器 |
ADMINISTER DATABASE TRIGGER | 允许创建ON DATABASE触发器。在能够创建ON DATABASE触发器之前,还必须先拥有CREATE TRIGGER或CREATE ANY TRIGGER权限 |
专用权限 | |
SYSOPER (系统操作员权限) | STARTUP SHUTDOWN ALTER DATABASE MOUNT/OPEN ALTER DATABASE BACKUP CONTROLFILE ALTER DATABASE BEGIN/END BACKUP ALTER DATABASE ARCHIVELOG RECOVER DATABASE RESTRICTED SESSION CREATE SPFILE/PFILE |
SYSDBA (系统管理员权限) | SYSOPER的所有权限,并带有WITH ADMIN OPTION子句 CREATE DATABASE RECOVER DATABASE UNTIL |
其他权限 | |
ANALYZE ANY | 对任何方案中的任何表、群集或者索引执行ANALYZE语句 |
GRANT ANY OBJECT PRIVILEGE | 授予任何方案上的任何对象上的对象权限 注意:没有对应的REVOKE ANY OBJECT PRIVILEGE |
GRANT ANY PRIVILEGE | 授予任何系统权限 注意:没有对应的REVOKE ANY PRIVILEGE |
SELECT ANY DICTIONARY | 允许从sys用户所拥有的数据字典表中进行选择 |
在Oracle9i以后,系统权限不会被级联删除。即用户A把某权限用with admin option方式赋给了B,而B把此权限又赋给了用户C,如果用户A把用户B的权限删除,则C的权限依然存在。
4.对象权限
GRANT [权限] ON [对象] TO [用户] [WITH GRANT OPTION] ; revoke[权限] on [对象] from [用户];
对象权限和系统权限不一样会被级联删除。指允许用户可以对数据库对象进行操作的权利(表、视图、序列)。
(这张表又是抄的。)
对象权限 | 表 | 视图 | 序列 | 过程 |
修改(alter) | √ | √ | ||
删除(delete) | √ | √ | ||
执行(execute) | √ | |||
索引(index) | √ | |||
插入(insert) | √ | √ | ||
关联(references) | √ | √ | ||
选择(select) | √ | √ | √ | |
更新(update) | √ | √ |
grant ALL on [对象] to [用户A]; A则拥有上表打勾的对应一列的所有对象权限。
5.角色管理
角色是权限的集合,可以把权限加入到角色中,再把角色和用户关联起来,那么用户就可以拥有角色中的权限。
DROP ROLE PROGRAMMER; --PROGRAMMER 和 programmer 是同一个东西
CREATE ROLE programmer;
GRANT ALTER any table to programmer;
GRANT ALL ON salary_tbl TO programmer;
Grant programmer to voapd;
select * from dba_sys_privs where grantee ='PROGRAMMER'; ---系统权限表
select * from dba_tab_privs where grantee ='PROGRAMMER'; ---对象权限表
注意:创建数据到系统表里会自动转换成大写。