[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 ...
随机推荐
- 把 URL 中文和一堆百分号转换成字符串
https://www.cnblogs.com/Enziandom/tag/Web%20%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91 JS 有解析这样的 URL 的函数,主 ...
- LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II
欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II LeetCode 491. 递增子序列 分析 找出并返回所有数组中不同的递增子序 ...
- IDEA 上传项目到 Gitee 小记
此方式可直接将 IDEA 中项目上传到 Gitee 仓库,无需打开 Gitee 手动创建空仓库. 前提环境 安装好 Git,并在 IDEA 中成功配置: 注册有 Gitee 账号,并记得账号密码: I ...
- C语言多维数组的实现与操作
常量和所需的头文件 #include<stdio.h> #include<stdarg.h> #include<stdlib.h> #define MAX_ARRA ...
- c# RegistryKey 的相关简单操作(转)
c# RegistryKey 的相关简单操作 以下从'读''写''删除''判断'四个事例实现对注册表的简单操作 1.读取指定名称的注册表的值 private string GetRegistDat ...
- 同一ip地址不同的主机冲突解决
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HA ...
- 【狂神说】SpringMVC笔记
1.回顾MVC ssm:mybatis+Spring+SpringMVC MVC三层架构 ssm框架:研究官方文档,锻炼自学能力,锻炼项目能力 SpringMVC+Vue+SpringBoot+Spr ...
- LinkedList的线程安全解决办法
方法一:List<String> list = Collections.synchronizedList(new LinkedList<String>()); 方法二:将Lin ...
- P9033题解
P9033「KDOI-04」XOR Sum 题解 题目链接 传送门 题意简述 构造一个长度为 \(n\),值域为 \([0,m]\) 的异或和为 \(k\) 的序列,如果不存在则输出 \(-1\). ...
- 074_Wrapper_Class
https://developer.salesforce.com/page/Wrapper_Class http://www.sfdcpoint.com/salesforce/wrapper-clas ...