用户能访问数据库前必须要有获得相应授权的账号,oracle中创建一个用户并为其分配密码
很简单,但是在创建用户的同时其实还可以指定很多该用户的属性,另外还有用户的特权授予。
以便用户去执行相应的操作。当创建了一个的同时也创建了一个通的shema,shema与用户是
一一对应的关系。shema是数据库对象的逻辑容器。
在创建用户的过程中可以指定的用户属性有:
1、认证方式
2、认证密码
3、默认的永久表空间,临时表空间
4、表空间配额
5、用户账号状态(locked or unlocked)
6、密码状态(expired or not)
语法格式:
create user username
identified by password;
你可以创建仅供运用程序使用的账户,用于运用程序连接数据库,没人可以使用该账户登录
到数据库。
oracle会根据你创建数据库时候的配置自动的创建预置账户:
所有的数据库都包括管理账户:
sys 默认密码:chang_on_install
system 默认密码:manager
sysman 默认密码:chang_on_install
dbsnmp 默认密码:dbsnmp
其实并不是所有的数据库都包括,你若在使用dbca创建数据库的是,不勾选
confiure enterprise manager
sysman与dbsnmp就不会有了。
如果安装的时候要求安装了sample schema,还会多出一些预置账户其中常用的有:
hr 默认密码:hr
scott 默认密码:TIGER
所有的数据都包含有内部账户(internal accounts),这些自动创建的用户,使得特别的
oracle特性或者组件拥有他们自己的schema。为保证这些账户被未经授权的使用,这些
账户是lock的,密码设置为expire。
SQL> create user oracleusr //用户名:oracleuser
2 identified by oracle //登陆验证密码:oracle (密码是大小写敏感的)
3 default tablespace users //用户的默认表空间:users
4 quota 10m on users //默认表空间中可以使用的空间配额:10MB
5 temporary tablespace temp //用户使用的临时表空间
6 password expire; //密码状态,过期。登陆的时候要求用户修改。
User created
用户创建过程中的注意事项:
1、对temporary tablespace不能指定配额。
2、如果没有为用户指定默认表空间,将使用system表空间,强烈建议指定默认表空间。
3、默认表空间不能是undo tablespace或者temporary tablespace。
4、如果没有为用户指定默认表空间,临时表空间,用户将使用system表空作为默认表空间
与临时表空,强烈避免出现此种状况。
可以查询数据字典dba_users查询用户的信息
下面查询上面创建的用户的部分信息。
SQL> select username,user_id,account_status,default_tablespace,temporary_tablespace
2 from dba_users
3 where username='ORACLEUSR';
USERNAME USER_ID ACCOUNT_STATUS DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ---------- -------------------------------- ------------------------------ ------------------------------
ORACLEUSR 70 EXPIRED USERS TEMP
注:dba_users中的password列已经在oracle11gR2中弃用了,取而代之的是authentication_type列。
修改用户的密码:
语法格式:
alter user user_name identified by new_password;
SQL> alter user system identified by oracle11g;
User altered
SQL> alter user oracleusr identified by oracle11g;
User altered
要注意了,oracle中给用户修改密码的时候是不需要,输入旧密码的。这是一个安全隐患。
任何用户可以给自己修改密码,但是要修改别人的密码需要取得相应的权限。
更改用户的密码:
除了使用alter user命令修改用户的密码以后,可以在sql*plus中使用password关键字修改
密码。
SQL> conn hr/hr
已连接。
SQL> password
更改 HR 的口令
旧口令:
新口令:
重新键入新口令:
口令已更改
SQL> conn system as sysdba
输入口令:
已连接。
SQL> password scott //DBA可以使用password+username修改其他用户的密码。
更改 scott 的口令
新口令:
重新键入新口令:
口令已更改
在pl/sql等其他工具中该命令是无法使用的。
给用户授予create session特权,以创建会话:
SQL> conn system as sysdba
输入口令:
已连接。
SQL> grant create session to oracleusr;
授权成功。
SQL> conn oracleusr
输入口令:
已连接。
这样用户就可以创建会话登录到oracle数据库中了.
锁定用户账号,当用户登录的时候会报ORA-28000的错误:
SQL> alter user oracleusr account lock;
用户已更改。
SQL> conn oracleusr
输入口令:
ERROR:
ORA-28000: 帐户已被锁定
设置用户密码的状态:
密码过期以后用户登录的时候会提示修改密码,并报ORA-28001错误。
SQL> alter user oracleusr password expire;
用户已更改。
SQL> conn oracleusr
输入口令:
ERROR:
ORA-28001: 口令已经失效
更改 oracleusr 的口令
新口令:
重新键入新口令:
口令已更改
已连接。
删除用户账户:
SQL> create user testuser identified by oracle11g;
用户已创建。
SQL> drop user testuser;
用户已删除。
请谨慎删除用户,删除用户的同时用户对应的schema中的对象也将被删除.
用户信息的查询:
很多时候只靠查询dba_users数据字典,用户的相关信息还可以查询:
dba_ts_quotas查询用户所在永久表空的配额等信息。
其实数据库中的很多用户都不需要磁盘配额,因为他们只需要其他schema中对象的访问与操作
特权。
SQL> select tablespace_name,bytes,max_bytes
2 from dba_ts_quotas
3 where username='ORACLEUSR';
TABLESPACE_NAME BYTES MAX_BYTES
------------------------------ ---------- ----------
USERS 0 10485760
database_properties查询有关默认临时表空间,永久表空间的设置情况。
max_bytes如果值是-1表示在对应的表空间中的磁盘配额是unlimited。
关于profile:
profile用于设置一系列的数据库资源使用限制。把profile分配给用户,用户的资源使用
被设置在profile的限制之内。使用create profile 创建profile.使用create user或
alter user给用户分配profile.
profile中的限制又分为两种:
resource_parameters:
sessions_per_user:指定用户并发的会话数。
cpu_per_session:以百分之一秒为单位,指定用户的CPU占用时间。
cpu_per_call:以百分之一秒,指定一次调用的的CPU占用时间。
connect_time:以分为单位,指定会话的持续时间。
idle_time:以分为单位,指定会话的空闲时间。
logical_reads_per_session:指定允许的logical reads 块数量。
logical_reads_per_call:指定一次调用允许的logical reads块数量。
private_sga:一个会话在SGA共享池中分配的私有会话空间的大小。
该参数只有在共享服务器模式下才有效。
composite_limit:以服务单元指定一个会话总的资源开销。oracle会根据cpu_per_session,
connect_time,logical_reads_per_session,private_sga的加权值来计算service units。
SQL> create profile new_profile1 limit //profile名称new_profile1
2 sessions_per_user 5 //用户的同时并发会话数5
3 cpu_per_session unlimited //会话的CPU占用时间无限制
4 cpu_per_call 6000 //一次调用不能占用CPU的时间不能超过60秒
5 connect_time 60 //单个会话持续的时间不能超过60分钟
6 logical_reads_per_session 1500 //单个会话所能允许的逻辑读块数:1500
7 logical_reads_per_call default //一次调用的所能允许的逻辑读块数使用默认值
8 private_sga 10k //单个会话可以占用的sga的内存空间:10kb
9 composite_limit 5000000; //复合资源限制的数量500万服务单元。
配置文件已创建
此处没有指定idle_time,password_parameters的参数,所有点那个把new_profile1分配给用户
的时候,这些限制将使用default profile中的默认值。
给用户分配profile:
SQL> alter user oracleusr profile new_profile1;
用户已更改。
如果用户在创建的时候不指定profile,oracle会自动把default profile分配给用户.
password_parameters:
failed_login_attempts:用户账户被锁定前,用户登录的尝试次数,默认值是10次。
password_life_time:指定密码过期的时间,默认值是180天。
password_reuse_time:当前密码可以重用以前必须经过的时间间隔。
password_reuse_max:当前密码可以被重用前需要修改的次数。
以上两个参数需要一同使用。
password_lock_time:当超过failed_login_attempts指定的值时,账户被锁定的天数。默认是一天。
password_grace_time:在password_life_time到期以后宽限用户使用原密码登录的天数
如果,在password_grace_time指定的天数内,旧密码仍有效,但是会提高用户更改密码。默认是7天。
password_verify_function:指定密码复杂度验证的PL/SQL函数,或第三方运用程序。不使用
密码验证函数,password_verify_function设置为null。
SQL> create profile new_profile2 limit
2 failed_login_attempts 3
3 password_life_time 90
4 password_reuse_time 180
5 password_reuse_max 3
6 password_verify_function null
7 password_lock_time 1
8 password_grace_time 5;
配置文件已创建
SQL> alter user oracleusr profile new_profile2;
用户已更改。
注意此时前面分配给用户的new_profile1就被new_profile2取代了。
在new_profile中未指定的resource_parameters会自动使用default profile中的默认值。
所有应该把所有的资源限制写在同一个profile中。
补充上节内容:
上节中提到了oracle的预置账户:sys,system
sys与system都具有很高的权限,都被授予了dba角色。但是sys的权限要高于system,sys用户
可以执行system用户无法执行的:数据库升级、数据库备份与恢复。system用户主要用于执行
数据库的日常管理工作。
注:数据库中数据库字典包含的所有的基表与视图都存储在sys schema中。这些基表与视图
对数据库的运行十分的关键,为了保证数据字典的完整性,在sys schema中的基表只能被数据库
操作。system schema额外的用于数据库管理的表与视图。