用户管理

用户具有以下属性:

  • 用户名: 不能超过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,避免了管理员需要定期为用户修改密码,同样减少了这些用户使用默认密码的安全威胁。

验证用户

连接到实例的用户必须通过验证。

可用的验证方式:

  1. 密码验证
  2. 操作系统验证。
  3. 密码文件验证。
  4. 强认证,例如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

  1. 查看pdb1的pdbadmin的profile是default。

  2. 创建一个HR_Profile

  3. 查看初始化参数 Resource_Limit,默认是True。

  4. 在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
  1. 修改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 数据库管理] 用户与权限管理的更多相关文章

  1. MongoDB系列---用户及权限管理02

    MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾:  本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过 ...

  2. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  3. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

    今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...

  4. MySQL用户与权限管理

    执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...

  5. mysql用户和权限管理

    用户和权限管理 Information about account privileges is stored in the user, db, host, tables_priv, columns_p ...

  6. 【linux相识相知】用户及权限管理

    linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管 ...

  7. linux用户及权限管理

    [文件管理.管道.用户及组管理.用户及权限管理]\用户及组管理 用户与组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...

  8. Mysql 用户,权限管理的几点理解。

    前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql. 公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂..简单是因为网上关于m ...

  9. DQL用户、权限管理(mysql8.0)

    DQL用户.权限管理(mysql8.0) 查看所有的用户: use mysql; -- 使用mysql数据库 select * from user; -- 查询user表中的全部信息,也就是用户 创建 ...

  10. Jenkins2.32用户和权限管理策略

    前言 在使用jenkins的过程中,需要为不同的角色分配相应的权限,如果jenkins的用户数据能和公司现在的帐号系统结合起来那会更好. 关于如何为用户分组,我推荐使用 role based auth ...

随机推荐

  1. 3D场景建模

    在这个虚拟现实的世界里,我们将会和你一起在云端构建属于自己的世界. 这里有一款3D场景编辑器可以让你在上面进行编辑.设计及渲染. 它是一个非常炫酷的软件,在这里,你可以尽情发挥你的想象力,创造出独一无 ...

  2. 深入解读.NET MAUI音乐播放器项目(三):界面交互

    UI设计的本质是对于产品的理解在界面中多种形式的映射,当需求和定位不同时,对相同的功能表达出了不同的界面和交互方式. 作为播放器,界面可以是千差万别的.<番茄播放器>的iOS平台上我开发了 ...

  3. CSS 子代选择器(>)

    后代选择器 后代选择器?是一种多个用空格分隔的选择器,别称包含选择器.范围是当前节点的所有子节点,包括其直接子节点. div#app下的所有 div 元素都使用下面的样式: div#app div { ...

  4. 魔兽世界2009年更换代理,九城CEO至全体员工公开信

    尊敬的全体第九城市员工, 最近一段时间以来,有关九城将要失去<魔兽世界>代理权的说法甚嚣尘上,各种传言四起.在目前来自<魔兽世界>的收入仍占九城收入绝大部分的情况下,对于外界的 ...

  5. java学习日记20230228-变量

    JAVA变量 变量是程序的基本组成单位 变量的3要素:类型 名称 值 int a = 1:定义了一个变量 int整数类型,名称为a,值为1 内存里面分配个空间,空间里的值为1 变量相当于 内存中一个数 ...

  6. spring RedisTemplate用法

    1.maven依赖 <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis --&g ...

  7. vue中aciton使用的自我总结

    一.需求: 我需要从后台中获取菜单列表在路由守卫中进行限制. 二.遇到的问题: action中setMenuData的方法如下: actions: { setMenuData(context){ ge ...

  8. sqlite查看所有表

    查询所有数据表名 SELECT name _id FROM sqlite_master WHERE type ='table'

  9. 安装 deepin linux 系统、linux 使用记录

    安装 deepin 深度linux系统 官网:https://www.deepin.org/zh/ 包含了下载ios镜像和安装教程: 最新版本:https://www.deepin.org/zh/do ...

  10. Javaweb 登陆与验证码

    本次记录分角色登陆以及验证码的Servlet. 1.登陆验证 <html><%-- Created by IntelliJ IDEA. User: jiachenglin Date: ...