数据库用户账户
Oracle是一款多用户的数据库软件。
1、用户:
1.1、查看当前使用的用户:
注意:oracle 10g中,用户名和密码不区分大小写。
oracle 11g中,用户名不区分大小写,但是密码严格区分大小写。
SQL> conn / as sysdba
Connected.
SQL> show user;
USER is "SYS"
1.2、查看当前数据库中存在哪些用户:
备注:Oracle数据库中每个用户名是唯一的。
SQL> select username from dba_users;
USERNAME
------------------------------
LISI
SCOTT
SH
HR
SYSMAN
SYS
SYSTEM
1.3、创建用户语句:
SQL> create user lisi identified by 123456;
User created.
备注:创建用户时可以指定该用户使用的默认表空间和默认临时表空间。
注意:在一个Oracle数据库中,可以同时存在多个用户表空间和临时表空间。在创建用户时就可以指定表空间使用。
1.4、每个用户拥有自己的用户概要文件(用户参数文件):
1、密码使用:用户密码使用多长时间、多长时间密码过期、密码过期时间提醒等
2、资源使用:用户可以使用多少会话资源、可以使用多少服务器资源等
1.5、每个用户都有自己的用户状态:
SQL> select username,account_status from dba_users;
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
LISI OPEN
SCOTT OPEN
SH OPEN
HR OPEN
ORACLE_OCM EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
BI EXPIRED & LOCKED
PM EXPIRED & LOCKED
MDDATA EXPIRED & LOCKED
IX EXPIRED & LOCKED
DIP EXPIRED & LOCKED
expired:当前用户密码过期,如果想要使用该用户,则需要给定新密码。
locked:当前用户被锁定。如果想要使用该用户,则需要解锁该用户。
解锁EXPIRED & LOCKED状态用户语法:
alter user 用户名 identified by 123456 account unlock;
Mysql和Oracle数据库对比:
Mysql数据库:
在Mysql数据库中,存在数据库的概念。
创建数据库:
create database zhangsan;--->创建数据库
无非就是在数据库文件路径中创建对应的zhangsan目录,zhangsan目录中保存什么而已。
创建数据表:
use zhangsan;
create table lisi;--->创建数据表
从数据库的角度来看:
zhangsan数据库包含lisi数据表。
从存储的角度来看:
zhangsan文件夹中存在lisi表的数据文件(lisi.ibd)
总结:在mysql中存在多数据库的概念,多数据库也仅是用户存放数据表,数据表用于存放数据。
关联数据存放在同一个数据库中方便管理。grant all on ku1.* ...
无关数据可以存放在不同数据库中,方便权限管理。grant all on ku2.* ...
Oracle数据库是单数据库设计。没有用户自行创建数据库的概念。
Oracle数据库软件是典型的单数据库软件。
dbca建库:
1、准备参数文件;
2、控制信息;
3、日志信息、数据信息。
手工建库:
1、手工编写参数文件,vim initzhangsan.ora
2、create database zhangsan;
总结:mysql的create database背后对应的就是目录的创建。
Oracle的create database背后对应的是日志文件和表空间文件的创建。
方案(schema):一个用户拥有的数据库对象的集合就叫achema。
dbca建库,创建orcl数据库:
sys用户连接:建表sys1
zhangsan用户连接:建表zs1、zs2
lisi用户连接:建表lisi1、lisi2、lisi3
上述的所有数据表都保存在orcl数据库中。
虽然所有的表都存放在orcl数据库,但在管理时,oracle提出了schema的概念。
例如:一旦存在zhangsan user,Oracle中自动产生zhangsan schema。
zhangsan user创建的表属于zhangsan schema。
schema和user同名。
sys用户操作:
create table u1.t1;--->t1表存在u1 schema中。
create table t1;--->t1表存在sys schema中。
作为普通用户来讲,只能查看到属于自己schema的数据表。
备注:完整创建用户语句:
create user "MYDBA" profile "default" identified by "123456" default tablespace "users" temporary tablespace "TEMP" account unlock grant "CONNECT" to "MYDBA";
预定义管理账户:
1、sys和system区别:
sys和system具有很接近的权限,非常大的区别在于sys用户具有sysdba权限。
2、sqlplus本地登录会跳过用户和密码验证。sqlplus user_name/passwd 但凡使用了as sysdba,一定是sys用户登录。
举例:
使用sys用户登录:
[oracle@oracle ~]$ sqlplus / as sysdba
使用system登录,并关库发现无权限:
[oracle@oracle ~]$ sqlplus system/123456
SQL*Plus: Release 11.2.0.3.0 Production on Sat May 22 15:22:56 2021
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
ORA-01031: insufficient privileges /权限不足
权限:
权限管理分为两类:
系统权限:用户能够执行哪些操作。
对象权限:用户能够对哪些对象操作。
举例一:
1、创建一个lisi用户,没有授权,他没有任何权限:
SQL>create user lisi identified by 123456;
2、使用lisi用户连接数据库,因为没有权限出错:
SQL> conn lisi/123456
ERROR:
ORA-01045: user LISI lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.
3、sys用户授权后用lisi用户可以登录数据库:
SQL> grant create session to lisi;
Grant succeeded.
SQL> conn lisi/123456
Connected.
4、创建一张表:
SQL> select * from tab;
no rows selected
SQL> create table wahaha as select * from dba_objects;
create table wahaha as select * from dba_objects
*
ERROR at line 1:
ORA-00942: table or view does not exist
5、给lisi授权一个可以读dba_objects的权限,然后再进行创建表:
SQL> grant select on dba_objects to lisi;
Grant succeeded.
SQL> create table wahaha as select * from dba_objects;
create table wahaha as select * from dba_objects
*
ERROR at line 1:
ORA-01031: insufficient privileges /权限不足
备注:现在lisi没有创建表的权限,所以不能创建数据表。
6、给lisi用户创建表的权限,然后再创建表:
SQL> conn / as sysdba
Connected.
SQL> grant create table to lisi;
Grant succeeded.
SQL> conn lisi/123456
Connected.
SQL> create table wahaha as select * from dba_objects;
create table wahaha as select * from dba_objects
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'USERS' /在users表空间上没有权限。
注意:普通用户使用的表空间,若在创建用户时未指定,则默认使用users表空间存放数据。
用户权限总结:
授权语句:
lisi用户远程连接权限:
grant create session to lisi;
lisi用户查看dba_objects数据字段的权限:
grant select on dba_objects to lisi;
lisi用户建表的权限:
grant create table to lisi;
系统权限:
grant 权限 to 用户;
对象权限:
grant 权限 on 对象 to 用户;
撤销权限:
revoke 权限 from 用户;
授予系统权限的SQL 语法是:
GRANT
OPTION(管理选项)]
注意:加上WITH ADMIN
OPTION参数,用户就具有给别人授予这个权限的权利。
授予对象权限的SQL 语法是:
GRANT
实验测试:通过撤销权限,理解with admin option和with grant option的区别。
with admin option和with grant option的区别:
1、级联授权:
WITH ADMIN OPTION和系统权限相关。
WITH GRANT OPTION和对象权限相关。
两种option都能让指定的用户级联授权。
举例:
1.1、sys用户赋权给lisi:
grant create session to lisi;--->能够连接实例
grant create session to lisi WITH ADMIN OPTION;--->lisi具有create session,并且可以将该权限赋权给其他用户。
1.2、lisi用户赋权给lisi1:
grant create session to lisi1;--->能够连接实例
2、回收权限:
2.1、WITH ADMIN OPTION(系统权限):
拥有WITH ADMIN OPTION的用户如果赋权给其他用户权限,则撤销权限时,仅撤销用户自己权限。
例如:
sys--->赋权给lisi--->lisi赋权给lisi1
sys revoke撤销lisi的系统权限,lisi的系统权限不受影响。
2.2、WITH GRANT OPTION(对象权限):
拥有WITH GRANT OPTION的用户如果赋权给其他用户权限,则撤销权限时,会发生级联权限撤销。
例如:
sys--->赋权给lisi--->lisi赋权给lisi1
sys revoke撤销lisi的对象权限,lisi1的对象权限失效。
角色:
角色的优点:
1、简化权限管理:使用角色可简化权限管理。可以将一组权限授予给某个角色,然后将该角色授予给每个用户,而不是将同一组权限授予给多个用户。
2、进行动态权限管理:如果修改了与某个角色关联的权限,则所有被授予该角色的用户都会立即自动获得修改后的权限。
3、有选择地提供权限:通过启用或禁用角色可以暂时打开或关闭权限。这样便可以在指定情形下控制用户的权限。
预定义角色:
例如:
grant connect(角色) to lisi;--->给lisi授予connect角色权限。
grant create session(系统权限) to lisi;--->给lisi授予create session系统权限。
注意:给开发人员创建用户,一般给一个connect、resource角色权限即可。
概要文件和用户:
实施口令安全功能:
客户端--->应用服务器--->数据库服务器(中间会有两个密码验证过程)
1、客户端--->应用服务器
1.1、使用的用户系统是应用服务器提供的,而密码的复杂度由应用来限定;
1.2、客户端在注册用户/修改密码时所使用的密码的复杂度由应用来保证;
1.3、如果应用对密码复杂度校验通过,最终应用会向数据库发送update/insert等语句。
2、应用服务器--->数据库服务器
2.1、使用的用户系统是数据库软件提供的。密码的复杂度由数据库软件决定。
2.2、Oracle默认并没有密码校验机制,作为DBA应该保证密码的复杂度。
数据库中运行密码管理脚本:
@?/rdbms/admin/utlpwdmg.sql
脚本运行完成后,会对密码进行复杂度校验。注意:在数据库中创建用户/修改用户密码时,复杂度校验会生效,但是之前已经创建的用户不受影响。