Oracle学习 第二天
—— 用户权限管理
SQL plus 常用命令
linesize 设置每行显示的字符。默认 80 个。 用法 : set linesize 需要显示的字符数
pagesize 设置每页显示的条目数。默认 14 个。14 个过后会重新打印一个表头,然后显示剩余条目。用法同上。
Oracle 用户管理
创建用户
命令:create user 用户名 identified by 密码
说明:一般是具有 dba(数据库管理员) 权限的用户才可以操作。如SYS 、SYSTEM
Oracle 数据库要求用户密码不能以数字开头
新创建的用户是没有任何权限的,需要 dba 用户给该用户授权,Oracle中的大小权限拥有一百多种。
分配权限:
grant 权限名 to 用户名。
例如:grant create session to user001 -- create session 权限仅仅可以登录,无法进行其他操作
权限分 系统权限(与数据库管理相关的权限)
create session 登录权限
create table 建表权限
create view 创建视图权限
……
和 对象权限(与用户操作数据对象相关的权限)
update 修改表数据的权限
insert 插入表数据的权限
delete 删除表数据的权限
select 查询表数据的权限
……
角色分 预定义角色(系统定义好的一组常用权限集合)
dba 包含大多数权限。如增删改查等。可以对其它用户的表进行操作
connect 包含较少权限,可以登录
resource 包含一般的权限,但不能查看其它用户的表空间
和 自定义角色(自定义的一组权限集合)
role1 自行将指定的权限分配给自定义的角色
回收权限:
revoke 权限名 from 用户名。
细节:上命令后可以继续 -- 表空间(即用户创建的表所存在的空间,指向一个具体的数据文件)
default tablespace users -- 该用户默认的表空间 users
temporay tablespace temp -- 该用户临时的表空间 temp
quota 3m on users; -- 该用户表空间的大小限制 3M
删除用户
命令:drop user 用户名 [cascade]
说明:当要删除的用户已经创建过数据对象时,删除该用户时需要在命令后面加上 cascade,表示删除该用户的同时将该用户创建的数据对象一起删除。
如果不想使用该用户了,但依然想使用该用户创建的数据对象时。就不能使用drop删除该用户,而应该是冻结用户。
在同一个db实例中,多个用户之间不能访问其他用户的表。
原因:当一个用户创建号好后,如果该用户创建了任意一个数据对象,这时,dbms 就会创建一个对应的方案与该用户对应,并且该方案的名字与用户名一致。
如果想访问其他用户的表。如A用户想访问B用户的table。
则需要登录B用户或者dba权限的用户,赋予A用户访问的权限。(指定允许其他人对自己的表进行什么操作,甚至可以指定对哪张表的哪些字段进行何种操作)
语法:grant all[select | delete | insert | update] on table名 to A用户 -- 其中all表示所有权限
权限指定后,即可操作其他用户的表,但需要注意的是,表名需要输入完整名称,即方案名.表名。
Profile管理用户口令
profile 是口令限制,资源限制的命令集合,当建立数据库的时候,Oracle会自动建立名称为default的profile,当建立的用户没有指定profile选项,那Oracle就会将default分配给用户。
profile的主要作用:
限制一个账户登录时最多可以输入密码的次数
限制一个账户连续多次输错密码后锁定账户以及锁定时间
语法:
创建profile文件
---SQL> create profile 文件名 limit failed_login_attempts 允许输错密码的次数 password_lock_time 锁定的天数;
为用户指定profile文件
---SQL> alter user 用户名 profile 文件名;
给用户解锁:
语法:
---SQL> alter user 用户名 account unlock;
终止口令:为了让用户定期修改密码,该命令需要dba身份操作
语法:
---SQL> create profile 文件名 limit password_lifr_time 30 password_grace_time 2;
要求用户每 30 天修改一次密码,宽限 2 天
---SQL> alter user 用户名 profile 文件名;
Oracle的登录认证
一个很奇怪的现象
SQL> show user
USER 为 "SCOTT"
SQL> conn xxx/xxx as sysdba
已连接。
SQL> show user
USER 为 "SYS"
输入任意的用户名和密码 as sysdba 登录的是SYS用户
原因:这里Oracle启动了操作系统认证。
as sysdba 语句 是 特权用户登录的标志, 即操作系统认证。前面的用户名和密码自动忽略,一旦登录成功,自动切换为SYS用户
我的电脑(右) -- 管理 -- 本地用户和组 -- 组 ---- 会发现ora_dba 即Oracle管理员组 -- 打开这个组 ---- 发现当前操作系统登录的账户 Administrator 也处于该组中。
我们也可以修改数据库文件 sqlnet.ora (一般存在于 app\product\11.2.0\dbhome_1\NETWORK\ADMIN 目录下),让特权用户登录的之后直接使用数据库验证。
SQLNET.AUTHENTICATION_SERVICES= (NTS) -- NTS 基于操作系统验证
SQLNET.AUTHENTICATION_SERVICES= (NONE) -- NONE 基于Oracle验证
SQLNET.AUTHENTICATION_SERVICES= (NTS, NONE) -- 两种验证方式共存
如果丢失管理员密码?
恢复办法:删除原有的密码文件,生成一个新的密码文件
步骤:
搜过 PWD数据库实例名.ora 文件 (app\product\11.2.0\dbhome_1\database)
删除该文件(建议备份)
生成新的密码文件。
在dos控制台下输入命令:
orapwd file=原来的密码文件全路径\密码文件名.ora password=新密码 entries=10;
新密码文件名一定要与原来密码文件名相同
其中entries是允许的特权用户个数
重启Oracle数据库实例即可生效
这个修改的是最高权限用户SYS的密码