暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C入门到精通之用户管理

ITPro进化论 2024-01-04
324

1. 用户与模式的关系

Oracle数据库的安全保护流程可以分为3个步骤。首先,用户向数据库提供身份识别信息,即提供一个数据库账号。其次,用户还需要证明他们给出的身份识别信息是有效的,这是通过输入密码来实现的,用户输入的密码经过数据库的核对,确认用户提供的密码是否正确。最后,假如密码是正确的,那么数据库认为身份识别信息是可信赖的。此时,数据库将会在基于身份识别信息的基础上确定用户拥有的权限,即用户可以对数据库执行什么操作。因此,为了确保数据库的安全,首要的问题就是对用户进行管理。

这里所谓的用户并不是指数据库的操作人员,而是在数据库中定义的一个名称,更准确地说它是账户,只是习惯上称其为用户,它是Oracle数据库的基本访问控制机制,当连接到Oracle数据库时,操作人员必须提供正确的用户名和密码。

Oracle提供了一些特权用户,如sysdba,这类用户主要用于执行数据库的维护操作,如启动数据库、关闭数据库、建立数据库,以及执行备份和恢复等操作。

Oracle提供了默认的特权用户sys,当以特权用户身份登录数据库时,必须带有AS SYSDBA,例如下面的代码:

--system/12345中的12345是system的登录密码
connect system/12345 as sysdba;

与用户密切关联的另一个概念是模式,模式也称作方案(schema)。模式实际上是用户拥有的数据库对象的集合。在Oracle数据库中,对象是以用户来组织的,用户与模式是一一对应的关系,并且二者名称相同。

下图显示了用户与模式的关系。其中,scott用户拥有的所有对象都属于scott模式,而hr用户拥有的所有对象都属于hr模式。

当访问数据库对象时,需要注意如下一些事项:

  • 在同一个模式中不能存在同名对象,但是不同模式中的对象名称则可以相同。
  • 用户可以直接访问其他模式对象,但如果要访问其他模式对象,则必须具有该对象的相应访问权限。例如,用户scott可以直接查看其模式中的emp表,但如果用户hr要查看scott模式中的emp表,则必须具有在emp表上进行SELECT操作的权限。
  • 当用户要访问其他模式对象时,必须附加模式名作为前缀。

2. 创建与管理用户

标识用户是Oracle数据库管理的基本要求之一,每一个能够连接到数据库的用户都必须是系统的合法用户。用户想要使用Oracle的系统资源(查询数据、创建表等),必须要拥有相应的权限。创建用户并授予权限是Oracle系统管理员的基本任务之一。

2.1. 身份验证

Oracle为用户账户提供了以下3种身份验证方法:

  • 密码验证。当一个使用密码验证机制的用户试图连接到数据库时,数据库会核实用户是否是一个有效的数据库账户,并且验证密码与该用户在数据库中存储的密码是否相同。
  • 外部验证。外部验证是指当用户试图连接到数据库时,数据库会核实用户是否是一个有效的数据库账户,并且确认该用户是否已经完成了操作系统级别的身份验证。外部验证用户并不在数据库中存储一个验证密码。
  • 全局验证。全局验证是指用户不在数据库中存储验证密码,而是通过一种高级安全选项所提供的身份验证服务来进行。

在上述3种验证方式中,密码验证是最常用的验证方法。

2.2. 创建用户

要创建一个新的用户(这里均指密码验证用户,以下不再重复说明),可采用CREATE USER命令。其语法格式如下:

CREATE USER user_name IDENTIFIED BY pass_word 
[or IDENTIFIED EXETERNALLY] 
[or IDENTIFIED GLOBALLY AS 'CN=user'
[DEFAULT TABLESPACE tablespace_default] 
[TEMPORARY TABLESPACE tablespace_temp] 
[QUOTA [integer K[M]] [UNLIMITED] ] ON tablesapce_ specify1 
[,QUOTA [integer K[M]] [UNLIMITED] ] ON tablesapce_ specify2 
[,…]…ON tablespace_specifyn 
[PROFILES profile_name] 
[ACCOUNT LOCK or ACCOUNT UNLOCK]

  • user_name:用户名,一般为字母数字型和“#”及“_”符号。
  • pass_word:用户口令,一般为字母数字型和“#”及“_”符号。
  • IDENTIFIED EXETERNALLY:表示用户名在操作系统下验证,这种情况下要求该用户必须与操作系统中所定义的用户名相同。
  • IDENTIFIED GLOBALLY AS 'CN=user':表示用户名由Oracle安全域中心服务器验证,CN名字表示用户的外部名。
  • DEFAULT TABLESPACE tablespace_default:表示该用户在创建数据对象时使用的默认表空间。
  • TEMPORARY TABLESPACE tablespace_temp:表示该用户所使用的临时表空间。
  • [QUOTA [integer K[M]] [UNLIMITED] ] ON tablesapce_ specify1 :表示该用户在指定表空间中允许占用的最大空间。
  • [PROFILES profile_name]:资源文件的名称。
  • [ACCOUNT LOCK or ACCOUNT UNLOCK]:用户是否被加锁,默认情况下是不加锁的。

2.2.1. 创建用户并指定默认表空间和临时表空间

创建一个用户为hr,口令为hrsoft,并设置默认的表空间为users,临时表空间为temp,代码如下:

create user hr identified by hrsoft default tablespace users temporary tablespace temp;

2.2.2. 创建用户并配置其在指定表空间上的磁盘限额

为了避免用户在创建表和索引对象时占用过多的空间,可以配置用户在表空间上的磁盘限额。在创建用户时,可通过QUOTA xxxM ON tablespace_ specify子句配置指定表空间的最大可用限额。

创建一个用户为mr,口令为mrsoft,默认表空间为users,临时表空间为temp,并指定该用户在TBS_TEST_1表空间上最多可使用的大小为10 MB,代码如下:

create user mr identified by mrsoft default tablespace users temporary tablespace temp quota 10on tbs_test_1;

如果要禁止用户使用某个表空间,则可以通过QUOTA关键字设置该表空间的使用限额为0。

2.2.3. 创建用户并配置其在指定表空间上不受限制

要设置用户在指定表空间上不受限制,可以使用QUOTA UNLIMITED ON tablespace_ specify子句。

创建一个用户为ar,口令为arsoft,临时表空间为temp,默认表空间为tbs_test_1,并且该用户使用tbs_test_1表空间不受限制,代码如下:

create user ar identified by arsoft default tablespace tbs_test_1 temporary tablespace temp quota unlimited on tbs_test_1;

在创建完用户之后,需要注意以下几点:

  • 如果建立用户时不指定DEFAULT TABLESPACE子句,那么Oracle会将SYSTEM表空间作为用户的默认表空间。
  • 如果建立用户时不指定TEMPORARY TABLESPACE子句,那么Oracle会将数据库默认临时表空间作为用户的临时表空间。
  • 初始建立的用户没有任何权限,所以为了使用户可以连接数据库,必须授权其CREATE SESSION权限。
  • 如果建立用户时没有为表空间指定QUOTA子句,那么用户在特定表空间上的配额为0,用户将不能在相应的表空间上建立数据对象。
  • 初始建立的用户没有任何权限,不能执行任何数据库操作。

3. 修改用户

修改用户的语法与创建的用户的语法基本相似,只是把创建用户语法中的CREATE关键字替换成ALTER。

3.1. 修改用户的磁盘限额

修改用户mr在表空间上的磁盘限额为20 MB(原始为10MB,增加10 MB),代码如下:

alter user mr quota 20on tbs_test_1;

3.2. 修改用户的口令

修改用户mrt的新口令为123456(原始为mrsoft),代码如下:

alter user mr identified by 123456;

3.3. 解锁被锁住的用户

Oracle默认安装完成后,为了安全起见,很多用户处于LOCKED状态,DBA可以对LOCKED状态的用户解除锁定,新创建的用户默认都是OPEN可用状态。

--查询用户账号状态
select username,account_status from dba_users;

使用ALTER USER命令解除被锁定的账户DIP,代码如下:

alter user DIP account unlock;

4. 删除用户

删除用户可以通过DROP USER语句来完成,删除用户后,Oracle会从数据字典中删除用户、方案及其所有对象方案。其语法格式如下:

drop user user_name [CASCADE]

  • user_name:要删除的用户名。
  • CASCADE:级联删除选项,如果用户包含数据库对象,则必须加CASCADE选项,此时会连同该用户拥有的对象一起删除。

使用DROP USER语句删除用户ar,并连同该用户拥有的对象一起删除,代码如下:

drop user ar cascade;

今天的文章就到这里,如果对你有用,记得点个【】和【在看】,感谢阅读~

文章转载自ITPro进化论,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论