[Oracle19C 数据库管理] 用户与权限管理
用户管理
用户具有以下属性:
- 用户名: 不能超过30位。不能包含特殊字符。必须用字符开头。用户名不区分大小写。
- 认证方式: 最常见的是密码认证。
- 默认永久表空间: 控制用户可以在哪个表空间里创建对象。
- 默认临时表空间: 临时表空间没有配额限制。
- 用户配置文件user profile: 一组密码限制策略。
- 初始消费组: Oracle资源管理器所使用。
- 账号状态: open, locked, expired。
Schema是用户所拥有的一组数据库对象的集合。Schema Object是schema中创建的任何对象(表、索引、同义词,视图,Database Link,序列、存储过程等)。
Oracle提供的管理员账号
SYS与SYSTEM是不能被删除的,在DBCA创建实例的时候为他们创建了密码。
可以为其他Oracle自带管理员账号解锁并重设密码。
SQL> alter user syskm identified by oracle account unlock;
User altered.
多租户下的公共账号与本地帐号
- 公共账号COMMON USER
公共账号将同步到所有的现有的和将来创建的PDB中。默认情况下,公共账号的名字必须使用C##开头,必须C##Admin。
初始化参数COMMON_USER_PREFIX指定了公共账号、角色和配置文件Profile的前缀。
创建公共账号,需要在CDB$ROOT或者APP$ROOT创建。使用CREATE USER,并且包含CONTAINER=ALL的子句。
公共账号可以使用同样的用户名和密码登录到所有的PDB。公共账号不能与任何存在于PDB的本地帐号重名。
- 本地用户LOCAL USER
本地用户只是在PDB中创建的用户。不能在CDB$ROOT或者APP$ROOT创建本地账号。
登录到想要创建本地帐号的PDB中,使用CREATE USER创建本地帐号。
SQL> CREATE USER C##CDBADMIN IDENTIFIED BY oracle ACCOUNT UNLOCK CONTAINER=ALL;
User created.
SQL> GRANT CREATE SESSION, DBA TO C##CDBADMIN CONTAINER=ALL;
Grant succeeded.
SQL> CONN C##CDBADMIN/oracle@pdb1;
Connected.
查看用户创建的common user
SQL> SELECT USERNAME, CON_ID FROM CDB_USERS WHERE COMMON='YES' AND USERNAME LIKE 'C##%';
USERNAME CON_ID
------------------------------ ----------
C##FIDELIO 3
C##CDBADMIN 3
创建本地用户
SQL> CREATE USER pdb1_admin IDENTIFIED BY oracle
2 DEFAULT TABLESPACE users
3 TEMPORARY TABLESPACE temp
4 ACCOUNT UNLOCK;
User created.
SQL> GRANT CREATE SESSION ,DBA TO pdb1_admin;
Grant succeeded.
SQL> conn pdb1_admin/oracle@pdb1
Connected.
SQL> select username ,con_id from cdb_users where common='NO';
USERNAME CON_ID
------------------------------ ----------
PDBADMIN 3
HR 3
PDB1_ADMIN 3
SMITH 3
OPS$LEO 3
Schema Only Account
Schema Only Account实现以下功能:
- Schema Only Account用户无法登录到实例。
- 强制使用应用程序访问数据。
- 无法在database link中使用schema only account连接数据库。
- 使用NO AUTHENTICATION子句创建schema only account。
- 管理特权可以分配到Schema only user,也可以撤销。
应用开发者可能需要只包含SCHEMA数据,但不需要登陆的账号。强制数据只能通过应用进行访问,避免手工登录到实例进行操作。可以通过ALTER USER来启用用户登录实例的功能。
使用CREATE USER ... NO AUTHENTICATION子句创建SCHEMA ONLY ACCOUNT。
通过查询DBA_USERS,可以查看用户的身份验证方式。SCHEMA ONLY ACCOUNT的AUTHENTICATION TYPE=NONE, 密码认证的用户的AUTHENTICATION TYPE=PASSWORD。
许多Oracle自带的Schema都是SHCEMA ONLY ACCOUNT,避免了管理员需要定期为用户修改密码,同样减少了这些用户使用默认密码的安全威胁。
验证用户
连接到实例的用户必须通过验证。
可用的验证方式:
- 密码验证
- 操作系统验证。
- 密码文件验证。
- 强认证,例如Kerberos验证。
系统特权用户必须使用操作系统认证或者密码文件认证或者强认证方式,无论数据库状态如何,都可以通过认证。
密码验证
设置密码的时候,可以将密码设置为立即过期,用户下次登陆的时候会提示更改密码。
密码不能超过30位,可以是任何字符,大小写敏感。
通过网络进行密码验证,密码会自动使用AES加密,对用户来说这个加密是透明的。
可以对用户设置密码策略,这是通过用户配置实现的(user profile)。
使用密码文件验证
可以为Oracle数据库实例或者ASM实例配置密码文件认证。密码文件存储公共或者本地管理员的用户名和密码。
DBCA创建数据库的过程中会创建密码文件。
设置初始化参数REMOTE_LOGIN_PASSWORDFILE。
为用户分配系统特权(Grant sysdba to mydba)。
Unix和Linux中,密码文件名为orapwORACLE_SID,存储在$ORACLE_HOME/dbs中。
Windows,密码文件名为PWD<ORACLE_SID>,存储在$ORACLE_HOME\database目录中。
SQL> select username, sysdba, sysoper, sysbackup, account_status, common, con_id
from v$pwfile_users;
USERNAME SYSDB SYSOP SYSBA ACCOUNT_STATUS COMMON CON_ID
---------- ----- ----- ----- --------------- -------- ----------
SYS TRUE TRUE FALSE OPEN YES 0
SYSTEM TRUE TRUE FALSE OPEN YES 0
PDBADMIN TRUE FALSE FALSE OPEN NO 3
操作系统认证
Oracle Universal Installer安装的过程中,会在Linux创建一系列的用户组。每个用户组对应到Oracle的权限组。比如系统dba组映射为Oracle的sysdba。
如果操作系统用户不属于以下组,则不能使用操作系统认证登录Oracle实例。
属于这些用户组的用户,可以直接登录Oracle实例,而不需要输入用户名或密码。
可以不输入用户名和密码,指定AS后面的权限即可。
sqlplus / as sysdba
sqlplus / as sysoper
输入错误的用户名和密码一样可以连接。
[oracle@ol7-19c ~]$ sqlplus any/any as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jan 30 20:31:38 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
如果使用操作系统认证,需要设置OS_AUTHENT_PREFIX初始化参数,来指定操作系统认证用户名的前缀,这个前缀的默认值是OPS$, 当操作系统用户leo登录时,Oracle会检查是否有一个OPS$LEO的用户存在,如果存在,则允许用户登录。
SQL> show parameter os_authent_prefix;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix string ops$
可以查询SESSION_PRIVS字典视图查看用户拥有的系统特权。
SQL> SELECT * FROM SESSION_PRIVS ORDER BY PRIVILEGE;
PRIVILEGE
----------------------------------------
ADMINISTER ANY SQL TUNING SET
ADMINISTER DATABASE TRIGGER
ADMINISTER RESOURCE MANAGER
ADMINISTER SQL MANAGEMENT OBJECT
ADMINISTER SQL TUNING SET
ADVISOR
ALTER ANY ANALYTIC VIEW
ALTER ANY ASSEMBLY
ALTER ANY ATTRIBUTE DIMENSION
ALTER ANY CLUSTER
...省略
表空间配额
配额是表空间允许用户使用的最大空间量。默认情况下,用户在所有的表空间都没有配额。
不能为用户在SYS, SYSAUX分配配额,也就是说只有SYS和SYSTEM才能操作这两个表空间。
也不需要为用户分配临时表空间和Undo表空间的配额,
分配表空间的三个选项
- UNLIMITED 用户对某个表空间不受限制。
- UNLIMITED TABLESPACE 用户在所有表空间不受限制。
- VALUE 设置一个用户可用的值, K or M。
SQL> CONN leozhang/oracle@pdb1
Connected.
SQL> create table test (id number);
Table created.
SQL> insert into test values(1);
insert into test values(1)
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'USERS'
给予用户在users表空间1000M配额
SQL> ALTER USER leozhang QUOTA 1000M ON users;
User altered.
给予用户在users表空间无限配额
SQL> ALTER USER leozhang QUOTA UNLIMITED ON users;
User altered.
给予用户在所有表空间的无限配额
SQL> GRANT UNLIMITED TABLESPACE TO leozhang;
Grant succeeded.
----未整理----
配置权限与角色
DBA_SYS_PRIVS查看用户和角色所拥有的系统权限。
SQL> create user itleo identified by oracle account unlock;
User created.
SQL> grant manager to itleo;
Grant succeeded.
SQL> grant drop any table to itleo;
Grant succeeded.
SQL> select grantee, granted_role, admin_option from dba_role_privs where grantee='ITLEO';
GRANTEE GRANTED_ROLE ADM
-------------------- -------------------- ---
ITLEO MANAGER NO
SQL> select grantee, privilege, admin_option from dba_sys_privs where grantee='ITLEO';
GRANTEE PRIVILEGE ADM
-------------------- ---------------------------------------- ---
ITLEO DROP ANY TABLE NO
DBA_ROLE_PRIVS查看赋给用户的角色, ADM代表用户有权将角色赋给其他用户。
SQL> select granted_role, admin_option from cdb_role_privs where grantee='PDBADMIN';
GRANTED_ROLE ADM
-------------------- ---
PDB_DBA YES
DBA NO
ROLE_SYS_PRIVS查看付给角色的系统权限。
SQL> create role manager;
Role created.
SQL> grant create session, create table, select any table to manager;
Grant succeeded.
SQL> select role, privilege from role_sys_privs where role='MANAGER';
ROLE PRIVILEGE
-------------------- ----------------------------------------
MANAGER CREATE TABLE
MANAGER CREATE SESSION
MANAGER SELECT ANY TABLE
设置DEFAULT ROLE给用户
分配给用户的角色都是默认角色,默认是启用的。
SQL> select grantee, granted_role,default_role from dba_role_privs
2 where grantee='WHARTON';
GRANTEE GRANTED_ROLE DEF
-------------------- -------------------- ---
WHARTON SELECT_USER YES
WHARTON CONNECT YES
可以通过ALTER USER ... DEFAULT ROLE ...设置默认角色。
SQL> alter user wharton default role connect;
User altered.
SQL> select grantee, granted_role,default_role from dba_role_privs
2 where grantee='WHARTON';
GRANTEE GRANTED_ROLE DEF
-------------------- -------------------- ---
WHARTON SELECT_USER NO
WHARTON CONNECT YES
SQL> alter user wharton default role connect, select_user;
User altered.
SQL> select grantee, granted_role,default_role from dba_role_privs
2 where grantee='WHARTON';
GRANTEE GRANTED_ROLE DEF
-------------------- -------------------- ---
WHARTON SELECT_USER YES
WHARTON CONNECT YES
用户可以使用set role来激活属于自己的角色。
SET ROLE 角色1, 角色2,角色3 这里没有列出的角色将会是禁用状态。
SQL> conn wharton/oracle@pdb1;
Connected.
SQL> show user;
USER is "WHARTON"
SQL> set role connect;
Role set.
SQL> select * from session_roles;
ROLE
--------------------------------------------------------------------------------
CONNECT
SQL> set role connect, select_user;
Role set.
SQL> select * from session_roles;
ROLE
--------------------------------------------------------------------------------
CONNECT
SELECT_USER
配置用户资源限制
Oracle通过PROFILE来控制用户资源消耗以及管理账户状态和密码过期设置。
RESOURCE_LIMIT初始化参数是TRUE的时候,profile才能进行资源限制。
SQL> show parameter resource_limit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean TRUE
profile可以在common或者local级别创建。用户需要CREATE PROFILE的权限才能创建profile。
/u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/utlpwdmg.sql 文件中关于密码的模板
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 180 #密码有效期180天
PASSWORD_GRACE_TIME 7 #超过有限期后有7天宽限期
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 10 #10次不成功的登陆锁定密码
PASSWORD_LOCK_TIME 1 #密码锁定1天
INACTIVE_ACCOUNT_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
将上面的语句提取出来后,修改:
CREATE PROFILE PDB1_PROFILE LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 4
PASSWORD_LOCK_TIME 1
INACTIVE_ACCOUNT_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
使用system链接到PDB1,将上面的语句贴入。
[oracle@ol7-19c ~]$ sqlplus system/oracle@pdb1
SQL> CREATE PROFILE PDB1_PROFILE LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 4
PASSWORD_LOCK_TIME 1
INACTIVE_ACCOUNT_TIME UNLIMITED
9 PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
Profile created.
应用Profile到用户。
SQL> ALTER USER itleo PROFILE pdb1_profile;
User altered.
创建common profile
CREATE PROFILE C##CDB_PROFILE LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 4
PASSWORD_LOCK_TIME 1
INACTIVE_ACCOUNT_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION ora12c_verify_function container=all;
SQL> alter session set container=cdb$root;
Session altered.
SQL>
CREATE PROFILE C##CDB_PROFILE LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 4
PASSWORD_LOCK_TIME 1
INACTIVE_ACCOUNT_TIME UNLIMITED
9 PASSWORD_VERIFY_FUNCTION ora12c_verify_function container=all;
Profile created.
应用c##cdb_profile到pdb1的Frank用户。
SQL> alter user frank profile c##cdb_profile;
User altered.
SQLDeveloper管理profile
查看pdb1的pdbadmin的profile是default。
创建一个HR_Profile
查看初始化参数 Resource_Limit,默认是True。
在SQLPLUS中,通过DBA_PROFILES查看Profile的设置。
SQL> SELECT PROFILE, RESOURCE_NAME, LIMIT FROM DBA_PROFILES
2 WHERE PROFILE='HR_PROFILE';
PROFILE RESOURCE_NAME LIMIT
-------------------- -------------------------- ---------------
HR_PROFILE COMPOSITE_LIMIT DEFAULT
HR_PROFILE SESSIONS_PER_USER DEFAULT
HR_PROFILE CPU_PER_SESSION DEFAULT
HR_PROFILE CPU_PER_CALL DEFAULT
HR_PROFILE LOGICAL_READS_PER_SESSION DEFAULT
HR_PROFILE LOGICAL_READS_PER_CALL DEFAULT
HR_PROFILE IDLE_TIME 15
HR_PROFILE CONNECT_TIME DEFAULT
HR_PROFILE PRIVATE_SGA DEFAULT
HR_PROFILE FAILED_LOGIN_ATTEMPTS DEFAULT
HR_PROFILE PASSWORD_LIFE_TIME DEFAULT
PROFILE RESOURCE_NAME LIMIT
-------------------- -------------------------- ---------------
HR_PROFILE PASSWORD_REUSE_TIME DEFAULT
HR_PROFILE PASSWORD_REUSE_MAX DEFAULT
HR_PROFILE PASSWORD_VERIFY_FUNCTION DEFAULT
HR_PROFILE PASSWORD_LOCK_TIME DEFAULT
HR_PROFILE PASSWORD_GRACE_TIME DEFAULT
HR_PROFILE INACTIVE_ACCOUNT_TIME DEFAULT
17 rows selected.
将HR用户应用到HR_PROFILE
ALTER USER HR PROFILE HR_PROFILE
HR用户空闲15分钟后自动断开
[oracle@ol7-19c ~]$ sqlplus hr/hr@pdb1
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Feb 4 19:55:36 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Fri Jan 27 2023 11:30:31 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
SQL> desc dba_users;
ERROR:
ORA-02396: exceeded maximum idle time, please connect again
- 修改profile的INACTIVE_ACCOUNT_TIME为10天, 能看到ora-02377报错,通过oerr ora 2377查看报错的信息并修改为15天。
SQL> ALTER PROFILE HR_PROFILE LIMIT INACTIVE_ACCOUNT_TIME 10;
ALTER PROFILE HR_PROFILE LIMIT INACTIVE_ACCOUNT_TIME 10
*
ERROR at line 1:
ORA-02377: invalid profile limit INACTIVE_ACCOUNT_TIME
SQL> ! oerr ora 2377
02377, 00000, "invalid profile limit %s"
// *Cause: A value of 0 or lower was specified for the limit.
// *Action: Specify a limit greater than 0. For password profile parameters,
// some additional restrictions apply:
// * For the INACTIVE_ACCOUNT_TIME profile parameter, the specified
// limit cannot be less than 15 days.
// * For the PASSWORD_GRACE_TIME profile parameter, 0 is allowed
// as a permissible value.
SQL> ALTER PROFILE HR_PROFILE LIMIT INACTIVE_ACCOUNT_TIME 15;
Profile altered.
[Oracle19C 数据库管理] 用户与权限管理的更多相关文章
- MongoDB系列---用户及权限管理02
MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾: 本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过 ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理
这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10
今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...
- MySQL用户与权限管理
执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...
- mysql用户和权限管理
用户和权限管理 Information about account privileges is stored in the user, db, host, tables_priv, columns_p ...
- 【linux相识相知】用户及权限管理
linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管 ...
- linux用户及权限管理
[文件管理.管道.用户及组管理.用户及权限管理]\用户及组管理 用户与组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...
- Mysql 用户,权限管理的几点理解。
前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql. 公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂..简单是因为网上关于m ...
- DQL用户、权限管理(mysql8.0)
DQL用户.权限管理(mysql8.0) 查看所有的用户: use mysql; -- 使用mysql数据库 select * from user; -- 查询user表中的全部信息,也就是用户 创建 ...
- Jenkins2.32用户和权限管理策略
前言 在使用jenkins的过程中,需要为不同的角色分配相应的权限,如果jenkins的用户数据能和公司现在的帐号系统结合起来那会更好. 关于如何为用户分组,我推荐使用 role based auth ...
随机推荐
- 代码随想录算法训练营day04 | leetcode
基础知识 记录一下栈实现及操作 public class ArrayDequeStack { public void main() { ArrayDeque stack = new ArrayDequ ...
- 在vs code中进行本地调试和开启本地服务器
https://blog.csdn.net/tangxiujiang/article/details/80927699
- Postgresql之闪回数据库示例
一.摘要 在Oracle中,若发生重大的误操作,那么我们可以使用flashback database命令来把数据库整体闪回到过去的误操作的时间点,当然前提是需要打开数据库的闪回功能. 在PG中,能否也 ...
- 安装pytorch报错 ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
windos安装,报错如下 看了不少回答,大概是缓存和内存满了 我的C盘只给了70G,然后意外发现只剩下3G多了,先用系统自带的清理工具清理了一下,然后腾讯电脑管家"工具箱"中的& ...
- winfrom快捷键
1.当活动窗体的快捷键 1 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 2 { 3 KeyEventArg ...
- 工作日统计工具(python)
一.前言 最近在整理之前写过的工具,发现这个虽然写得很简单,但是现在回头看看还挺有趣,就放出来LOL 记得应该是因为当初写立项书的时候,总是得算10个工作日之后是几号,或者到几号结束还剩下多少个工作日 ...
- 新的学习历程-python6 字符串基础使用
1 sentence1 = 'tom\'s pet is a cat' # 单引号中包含转单引号 2 sentence2 = "tom\'s pet is a cat" 3 sen ...
- pgsql判断字符串是否为数字
利用正则表达式来对字符串进行匹配 因为工作遇到了一个问题需要对字符串是否可以转换为数值进行判断.今天关于这个问题进行一个分享,流程如下 数字的正则表达式 ^([0-9]+.?[0-9]*|.[0-9] ...
- HTTP头注入:XFF注入
0x00:XFF是什么? X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修 ...
- 记录multipartFile表单类型转化为file
导入依赖 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...