Oracle数据库用户管理介绍
- 格式:pdf
- 大小:1.66 MB
- 文档页数:48
一、概述Oracle数据库是当前企业中常用的数据库管理系统之一,而数据库管理人员在企业中扮演着至关重要的角色,他们负责数据库的管理与维护,包括权限设置与分配。
本文将探讨Oracle数据库管理人员权限设置及分配表的相关内容。
二、数据库管理员的权限1. 数据库管理员(DBA)是Oracle数据库中最高权限的用户,具有对数据库进行全面控制的特权。
他们可以创建、修改、删除数据库对象,分配SQL权限,管理数据库用户和角色等。
2. DBA用户的权限通常由系统管理员在安装数据库时创建,或是通过GRANT命令授予。
3. DBA用户可以通过GRANT和REVOKE命令控制其他用户的权限,以及管理数据库对象的安全性。
三、数据库操作员的权限1. 数据库操作员(DBO)是在数据库中具有一定权限的用户,通常负责对数据库进行日常操作。
2. DBO用户可以执行SELECT、INSERT、UPDATE、DELETE等操作,并且可以创建临时表和视图。
3. DBO用户的权限通常由DBA用户通过GRANT命令分配,可以根据需要灵活控制其权限范围。
四、权限设置的最佳实践1. 了解业务需求:在设置数据库用户的权限之前,需要充分了解企业的业务需求,确保每个用户都能够在权限范围内完成工作。
2. 分配最小权限原则:根据最小权限原则,应该仅分配用户所需的最低权限,以降低数据泄露和操作错误的风险。
3. 定期审计权限:定期对数据库用户的权限进行审计,及时发现和修复不合理的权限设置,保障数据库的安全性。
五、权限分配表的编制数据库管理人员需要编制一份权限分配表,清晰地记录每个用户的权限范围,确保权限设置的合理性与一致性。
权限分配表通常包括以下内容:1. 用户名称:列出数据库中所有的用户名称。
2. 权限说明:对用户的权限进行详细说明,包括SELECT、INSERT、UPDATE、DELETE等操作的权限范围。
3. 是否受限:记录是否对用户的权限进行了限制,比如是否禁止用户执行DROP TABLE等危险操作。
数据库用户管理和权限管理1. 引言在数据库系统中,用户管理和权限管理是非常重要的功能。
通过用户管理,可以创建、修改和删除数据库用户,并为其分配相应的权限;通过权限管理,可以控制用户对数据库中数据和对象的访问和操作。
本文将介绍数据库用户管理和权限管理的基本概念、操作方法以及相关注意事项。
2. 数据库用户管理2.1 用户概念在数据库系统中,一个用户代表一个具有一定身份和权限的操作者。
每个用户都有自己的用户名和密码用于登录数据库系统。
2.2 用户创建创建新用户是管理员对数据库进行用户管理的第一步。
在大多数数据库系统中,可以使用以下语句来创建新用户:CREATE USER username IDENTIFIED BY password;其中,username为要创建的用户名,password为该用户名对应的密码。
2.3 用户修改在某些情况下,需要修改已存在的用户信息。
例如,当需要更改用户名或密码时,可以使用以下语句来修改现有用户:ALTER USER username IDENTIFIED BY new_password;2.4 用户删除当某个用户不再需要访问数据库时,可以使用以下语句将其从数据库中删除:DROP USER username;需要注意的是,在执行删除操作之前,请确保该用户已经没有任何重要数据或对象依赖于它。
3. 数据库权限管理3.1 权限概念数据库权限是指用户对数据库中数据和对象的访问和操作权力。
在数据库系统中,常见的权限包括SELECT、INSERT、UPDATE、DELETE等。
3.2 权限分配在数据库系统中,可以使用以下语句为用户分配权限:GRANT privilege ON object TO user;其中,privilege为要授予的权限,object为要授权的对象(如表、视图等),user为要授权给的用户。
3.3 权限撤销当某个用户不再需要某个权限时,可以使用以下语句将该权限从用户身上撤销:REVOKE privilege ON object FROM user;3.4 角色管理角色是一种特殊类型的用户,它可以扮演多个用户之间共享的角色,并且具有一组预定义的权限。
为了规范数据库用户的操作,特制订如下规范:一、每个系统建立自己的数据库文件和索引文件,每个文件不允许超过2G,不支持自动扩展,系统根据自己的情况申请相应大小的数据文件;创建文件系统的命令为:(1)创建表空间Create tablespace coredb_data logging datafile'/home/oracle/oracle/product/10.2.0/oradata/orcl/coredb_data01.dbf'size 2G autoextend off(2)创建索引空间Create tablespace coredb_idx logging datafile'/home/oracle/oracle/product/10.2.0/oradata/orcl/coredb_idx01.dbf'size 1G autoextend off(3)增扩表空间alter tablespace coredb_idx add datafile'/home/oracle/oracle/product/10.2.0/oradata/orcl/coredb_idx02.dbf' size 2Gautoextend off(4)查看表空间select dbf.tablespace_name,dbf.totalspace "总量(M)",dbf.totalblocks as 总块数,dfs.freespace "剩余总量(M)",dfs.freeblocks "剩余块数",(dfs.freespace / dbf.totalspace) * 100 "空闲比例"from (select t.tablespace_name,sum(t.bytes) / 1024 / 1024 totalspace,sum(t.blocks) totalblocksfrom dba_data_files tgroup by t.tablespace_name) dbf,(select tt.tablespace_name,sum(tt.bytes) / 1024 / 1024 freespace,sum(tt.blocks) freeblocksfrom dba_free_space ttgroup by tt.tablespace_name) dfswhere trim(dbf.tablespace_name) = trim(dfs.tablespace_name)二、创建用户的命令使用ORACLE用户执行如下命令(无DBA权限):sqlplus '/as sysdba' <<!drop user <user> cascade;create user <user> identified by <user> default tablespace coredb_data temporary tablespace temp;grant connect to <user>;grant resource to <user>;grant create session to <user>;grant create view to <user>;alter user <user> quota unlimited on coredb_idx;alter user <user> quota unlimited on coredb_data;!三、检查用户是否有DBA权限select * from sys.dba_role_privs where granted_role='DBA';GRANTEE GRANTED_ROLE ADM DEF------------------------------ ------------------------------ --- ---------------------- SYSTEM DBA YES YESGLSDB DBA YES YESSHENG DBA YES YESSYS DBA YES YES COREDB DBA YES YES四、去除DBA权限1)Sqlplus “/as sysdba”2)revoke dba from <user>;3)exit;五、用户的权限(1)查看用户权限;(2)增加用户权限;当系统报错:ORA-01031: 权限不足grant create any synonym to dhrep;//增加同义词权限(3)解除用户权限;五、异常情况的处理(1)ora-01045:user system lacks create session privilege; logon denied 解决办法:1)使用oracle 用户执行sqlplus “/as sysdba”2)grant create session,resource to <user>;3)exit;(2)ORA-1536:space quota exceeded for tablespace解决办法:1)使用oracle 用户执行sqlplus “/as sysdba”2)Grant unlimited tablespace to <user>;3)Exit;(3)ORA-01950: 对表空间'USERS' 无权限解决办法:1)使用oracle 用户执行sqlplus “/as sysdba”2)Conn <user>/<passwd>;3)select * from user_sys_privs;USERNAME PRIVILEGE ADM-----------------------------------------------------coredb CREATE SESSION NO4)grant connect,resource,create session,create view to glsdb_hn;5)select * from user_sys_privs;USERNAME PRIVILEGEADM------------------------ ---------------------------------------- ---coredb_HN CREATE VIEW NOcoredb_HN CREATE SESSION NOcoredb_HN UNLIMITED TABLESPACE NO 6)Exit;(4)没有DBA权限后,如果涉及跨db_user访问其他用户的,需要以下方法:1)创建存储过程将两个用户名作为参数传给存储过程:/*把用户(From_user)所有表的读写权限赋给用户(To_user)的存储过程为*/create or replace procedure grantUser(From_user in varchar2, To_user in varchar2) isretval number;scursor int;v_tablename VARCHAR2(60);sqlstr varchar2(200);cursor c_tablename is select table_name from dba_tables where owner=From_user; BEGINfor v_tablename in c_tablenameloopsqlstr := 'grant select,delete,update,insert on '|| From_user||'.'||v_tablename.table_name || ' to '||To_user;scursor := dbms_sql.open_cursor;dbms_sql.parse(scursor,sqlstr, dbms_sql.native);retval := dbms_sql.execute(scursor);dbms_sql.close_cursor(scursor);end loop;exceptionWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');WHEN TOO_MANY_ROWS THENDBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('发生其它错误!');END grantUser;//*把用户(From_user)所有表的读写权限从用户(To_user)收回的存储过程为*/ create or replace procedure revokeUser(From_user in varchar2, To_user in varchar2) isretval number;scursor int;v_tablename VARCHAR2(60);sqlstr varchar2(200);cursor c_tablename is select table_name from dba_tables where owner=From_user; BEGINfor v_tablename in c_tablenameloopsqlstr := 'revoke select,delete,update,insert on '||From_user||'.'||v_tablename.table_name || ' from '||To_user;scursor := dbms_sql.open_cursor;dbms_sql.parse(scursor,sqlstr, dbms_sql.native);retval := dbms_sql.execute(scursor);dbms_sql.close_cursor(scursor);end loop;exceptionWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');WHEN TOO_MANY_ROWS THENDBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('发生其它错误!');END revokeUser;2)执行存储过程(注意,存储过程的名称不能一样,否则会被替换)Execute grantUser / revokeUser;3)如果增加新的表,还需要充分执行同样的操作;。
如何看Oracle数据库的⽤户登录的记录档案如何看数据库的⽤户登录的记录档案1 audit⽤审记来记录⽤户的操作信息2 trigger⽤系统触发器来记录⽤户登录3 logmnr从log⽂件中挖出⽤户登录信息推荐使⽤第3种,不占⽤系统资源,⽽且很⽅便。
===============================Oracle 中记录⽤户登录信息我们可以使⽤ Oracle Audit 函数来记录⽤户登录信息,但是如果开放了 Audit 函数将会使Oracle 性能下降,甚⾄导致 Oracle 崩溃。
那我们如何才能记录⽤户登录信息呢?其实我们可以通过建⽴触发器的⽅式来实现。
⽅法如下:1. ⽤ sys ⽤户登录 Oracle2. 创建记录⽤户登录信息的表CREATE TABLE LOG$INFORMATION(ID NUMBER(10),USERNAME VARCHAR2(30),LOGINTIME DATE,TERMINAL VARCHAR2(50),IPADRESS VARCHAR2(20),OSUSER VARCHAR2(30),MACHINE VARCHAR2(64),PROGRAM VARCHAR2(64),SID NUMBER,SERIAL# NUMBER,AUSID NUMBER)/3. 创建⼀个 Sequence,作为登录信息的主键CREATE SEQUENCE LOGIN_SEQminvalue 1maxvalue 9999999999start with 1increment by 1cache 20/4. 创建触发器,记录⽤户登录信息CREATE OR REPLACE TRIGGER LOGIN_RECORD_TRAFTER logon ON DATABASEDECLAREmtSession v$session%ROWTYPE;CURSOR cSession(iiQuerySid IN NUMBER) ISSELECT * FROM v$sessionWHERE audsid = iiQuerySid;BEGINOPEN cSession(userenv('SESSIONID'));FETCH cSession INTO mtSession;IF cSession%FOUND AND SYS_CONTEXT ('USERENV','IP_ADDRESS') IS NOT NULL THENINSERT INTO log$information(id,username,logintime,terminal,ipadress,osuser,machine,program,sid,serial#,ausid) VALUES(login_seq.nextval,USER,SYSDATE,mtSession.Terminal,SYS_CONTEXT ('USERENV','IP_ADDRESS'),mtSession.Osuser,mtSession.Machine,mtSession.Program,mtSession.Sid,mtSession.Serial#,userenv('SESSIONID'));END IF;CLOSE cSession;EXCEPTIONWHEN OTHERS THENRAISE;END;/5. 将 SYS.LOG$INFORMATION 授权给需要查看登录记录的⽤户Grant select on SYS.LOG$INFORMATION to XXX/=======================================审计⽤户登录和登出记录每个⽤户每次登录数据库和退出数据库的⽇期和事件。
Oracle数据库用户管理介绍
Oracle用户管理
Account locking
T ablespace quotas
T emporary tablespace
Default tablespace
Role privileges
Resource limits
Security domain
Direct privileges
Authentication mechanism
✓需要了解:
创建数据库用户
更改,删除已存在数据库用户
监控用户信息
Schema Objects Tables
Triggers Constraints Indexes Views
Sequences
Stored program units Synonyms
User-defined data types
Database links
数据库用户
• A schema is a named
collection of objects
• A user is created, and a
corresponding schema is created
•User can be associated only
with one schema
•Username and schema are
often used interchangeably
创建用户的一基本参数
•表空间配额
•默认表空间
•用户密码
•权限,角色
✓密码认证
创建初始密码:
CREA TE USER aaron IDENTIFIED BY soccer DEFAULT TABLESPACE data TEMPORARY TABLESPACE temp QUOTA 15m ON data PASSWORD EXPIRE;
A TE USER ops$oracle NTIFIED EXTERNALLY AULT TABLESPACE USERS
PORARY TABLESPACE temp TA 15m ON data ✓操作系统认证
OS_AUTHENT_PREFIX initialization parameter specifies the format of the usernames Defaults to OPS$
CRE IDE DEF TEM
QUO PASSWORD EXPIRE;
更改配额
ALTER USER abc QUOTA 1m ON USERS;
✓删除用户
Use the CASCADE clause to drop all objects in the schema if the schema contains objects.
指定CASCADE
DROP USER abc;
✓删除用户
断开abc用户所有连接
DROP USER abc CASCADE;
Users currently connected to the Oracle server cannot be dropped
✓获取用户信息 相关数据字典
•DBA_USERS
•DBA_TS_QUOTAS
✓权限管理
需要了解
•获取系统对象权限
•赋予、回收权限
•获取审计属性
两种用户权限:•System:数据库级别权限•Object:对象级别权限
系统级权限
Category Examples
INDEX CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX TABLE CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
SELECT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE SESSION CREATE SESSION
ALTER SESSION
RESTRICTED SESSION TABLESPACE CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE
SYSDBA and SYSOPER权限列表
Category Examples
SYSOPER STARTUP
SHUTDOWN
ALTER DATABASE OPEN |MOUNT
ALTER DATABASE BACKUP CONTROLFILE TO
RECOVER DATABASE
ALTER DATABASE ARCHIVELOG
SYSDBA SYSOPER PRIVILEGES WITH ADMIN OPTION
CREATE DATABASE
ALTER DATABASE BEGIN/END BACKUP
RESTRICTED SESSEION
RECOVER DATABASE UNTIL
对象权限
OBJECT PRIV TABLE VIEW SEQUENCE PROCEDURE ALTER√√
DELETE√√
EXECUTE√INDEX√
INSERT√√
REFERENCES√√
SELECT√√√
UPDATE√√
WITH ADMIN OPTION选项
DBA GRANT
REVOKE Jeff Emi Jeff Emi
DBA
✓赋予Privileges
SQL> grant XXX to XXX with admin option;
✓回收Privileges
SQL> revoke XXX from XXX;
✓获取权限信息 相关数据字典
•DBA_SYS_PRIVS •SESSION_PRIVS
•DBA_TAB_PRIVS
•DBA_COL_PRIVS
Privileges
Roles
UPDATE ON
JOBS
INSERT ON JOBS
SELECT ON
JOBS
CREA TE TABLE CREA TE SESSION
HR_CLER K
HR_MGR A
B
C
✓角色管理
Users
需要了解
•创建修改角色•控制角色•移除角色
•使用预定义角色•获取角色信息
Creating Roles
CREA TE ROLE oe_clerk;
CREA TE ROLE hr_clerk
IDENTIFIED BY bonus; CREA TE ROLE hr_manager
IDENTIFIED EXTERNALLY;
预定义角色
Role Name Description
CONNECT, RESOURCE,DBA These roles are provided for backward compatibility
EXP_FULL_DATABASE Privileges to export the database IMP_FULL_DATABASE Privileges to import the database
DELETE_CATALOG_ROLE DELETE privileges on data dictionary tables
EXECUTE_CATALOG_ROLE EXECUTE privilege on data dictionary packages
SELECT_CATALOG_ROLE SELECT privilege on data dictionary tables
修改角色
ALTER ROLE oe_clerk
IDENTIFIED BY order; ALTER ROLE hr_clerk
IDENTIFIED EXTERNALLY; ALTER ROLE hr_manager
NOT IDENTIFIED;。