一、创建用户
(一)简单创建
1、权限:只有DBA用户才有权限,或有create user 的系统权限
2、语法:
- create user 用户名 identified by 密码;
- oracle密码不能以数字打头
3、实例:用户名-sam_sho、密码-sam123
- create user sam_sho identified by sam123;
4、注意:
1)刚创建的用户没有任何权限, 需要管理员分配权限。如登录权限:
- grant create session to sam_sho ; --分配登录权限
- create session:登录权限。
2)oracle的权限较为复杂,下面单独处理。
(二)复杂创建
1、实例
- create usersam_sho
identified by sam123 - default tablespace users --默认表空间。users是oracle自己创建的表空间
- temporary tablespace temp --临时表空间
- quota 3m on users ; --分配表空间大小,3m。unlimited-不限制大小
- grant create session to sam_sho ; --分配登录权限
- grant dba to sam_sho ; --分配DBA 角色
- grant select on V_table to sam_sho ; --分配查询表的权限
2、表空间理解
1)表存在的空间,即在逻辑上表(Table)都是存放在表空间中(Tablespace )
2)一个表空间指向具体的数据文件
3)resourse 角色的用户,创建的表没有表空间限制。
- grant resourse to sam_sho ; --分配resourse 角色
(三)Oracle的用户管理机制
1、一些概念:
- oracle dbms:数据库管理系统
- db 实例:
- 表空间
- 数据对象
- 表
- 用户
- 权限:系统权限与数据库权限。
- 角色:把常用的权限集中起来。
2、权限、角色、用户的关系
二、登录及修改密码
(一)用户登录
1、切换用户,用户登录。
1)语法:
- conn 用户名/密码 【as sysdba/sysoper】
2)实例:
- conn sam_sho/sam123;
- conn sam_sho/sam123 as sysdba;
- 实际登录的不是sam_sho,可以show user看看
- 和验证机制有关,见下面。
2、显示当前登录用户的名称
1)语法:
- show user;
(二)修改密码
1、给用户修改密码
1)语法:
- passw【ord】 用户名
2)实例:
- passw sam_sho;
- passw
3)注意:
- 给自己修改,不需要带用户名,给别人修改需要带上。
2、给别人修改密码
1)权限:需要DBA的权限,或者拥有alter user 的系统权限
2)语法:
- alter user 用户名 identified by 新密码;
3)实例:
- alter user sam_sho identified by sam456;
(三)删除用户
1、权限:一般需要DBA的权限,或者需要具有drop user的权限
2、语法:
- 语法:drop user 用户名 (cascade)
- cascade 参数:级联删除该用户创建的表等数据对象。数据库会提醒的。
3、实例:
- drop user sam_sho ;
- drop user sam_sho cascade;--级联删除用户创建的表等数据
4、删除某个用户,但保留其数据对象
- 方案:锁定该用户
- alter user 用户 account lock;
- alter user 用户 account unlock;--解锁
三、用户口令
1、概述:
- 需要DBA身份
- profile 是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default 的profile。
- 当建立用户没有指定 profile 选项,那么oracle 就会将default 分配给用户。
2、账户锁定
- 概述:指定该账户登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天),一般用dba 的身份去执行该命令。
- 实例:指定 这个用户最多只能尝试3次登录,锁定时间为2天。
- create profile lock_account limit failed_login_attempts 3 password_lock_time 2;
- alter user sam123 profile lock_account ;--分配
3、账户解锁:
- 语法:
- alter user 用户名 account unlock;
- 实例:
- alter user sam123 account unlock;
4、终止口令
- 概述:为了让用户定期修改密码可以使用终止口令来完成
- 实例:建立新的profile ,要求该用户每隔10天要修改自家的登录密码,宽限期为2天。
- create profile myProfile limit password_life_time 10 password_grace_time 2;
- alter user sam123 profile myProfile;
5、历史口令:新旧密码不能重复
- create profile myProfile2 limit password_life_time 10 password_grace_time 2 password_reuse_time 1
- alter user sam123 profile myProfile2;
6、删除口令
- drop profile myProfile2 ;
四、权限与角色
(一)、概述:
1、刚创建的用户没有任何权限(不能登录),需要赋予各种权限。oracle对于权限的管理,需要引用角色的概念。
2、权限
1)系统权限:用户对数据库管理的操作以及对数据对象本身的操作的权限。
- 包括建库、建表、建索引、登录数据库、修改密码等等
2)对象权限:用户对其他用户的数据对象数据操作的权限。
- 权限主要分为:select、insert、update、delete、all、create index 等等
3、角色:简化对权限的管理。
1)预定义角色
- connect :连接的角色
- DBA:管理员角色
- resource:这个角色可以在任何表空间中建表。
2)自定义角色
4、查看权限、角色
- 通过PL/SQL DEV工具查看
- 通过各种指令
5、权限分配的方式
- 直接分配权限
- 系统权限(与数据库管理相关):
- grant create sessionto sam_sho ;--分配登录权限
- 对象权限(增删改查):
- grantselectonV_table
to sam_sho ;--分配查询表的权限
- grantselectonV_table
- 系统权限(与数据库管理相关):
- 分配角色,批量分配权限
- grantdbato sam_sho ;--分配DBA 角色
6、撤销权限
- 语法:revoke 权限 from 用户
- 实例:
- revoke select on emp from sam_sho; 从sam_sho收回emp表的查询权限
- revoke connect from sam_sho;
(二)权限
1、系统权限:是指执行特定类型sql命令的权限,它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有 create table 权限时,可以在其方案中建表。当用户具有 create any table 权限时,可以再任何方案中建表。
1)内容
- create session 连接数据库
- create table 建表
- create view 建视图
- create public synonym 建同义词
- create procedure 建过程、函数、包
- create trigger 触发器
- create cluster 建簇
- create sequence 建索引
- create type
2)显示:
- oracle 提供了166系统权限,查询数据字典视图 system_privilege_map
- select * from system_privilege_map order by name;--查询系统权限
3)赋予系统权限:grant
- 一般情况下只有DBA才能完成 或者拥有 grant any privilege 权限
- 赋权限语句后+ with admin option ,实现系统权限的传递(和方案一起理解)
- grant connect to sam_sho with admin option
4)权限回收:revoke
- 不是级联回收。
2、对象权限:访问其他方案对象的权利。用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。
1)内容:
- alter 修改
- delete 删除
- select 查询
- insert 添加
- update 修改
- index 索引
- references 引用
- execute 执行
2)显示:DBA用户可以查看对象权限 dba_tab_privs
- select distinct privilege from dba_tab_privs;
3)赋予对象权限
- 直接可以赋权限给用户 或者角色
- 赋权限语句后+ with grant option ,实现系统权限的传递
- grant select on emp to sam_sho with grant option
- 只能赋予用户,不能赋予角色
4)权限回收:revoke
- 是级联回收。
(三)角色
1、预定义角色:33种
1)常见内容
- connect :连接的角色
- DBA:管理员角色(sys 和 system)。不具备启动和关闭数据库
- resource:这个角色可以在任何表空间中建表。
- 隐藏了 unlimited tablespace 的权限
2)显示
- 查看预定义角色:33种角色
- select * from dba_roles;
- 查看角色的系统权限
- SELECT * FROM dba_sys_privs where grantee = ‘DBA‘
- SELECT * FROM role_sys_privs WHERE role = ‘DBA‘;
- 查看角色的对象权限
- SELECT * FROM dba_tab_privs where grantee = ‘DBA‘
- 查看某个用户的角色
- SELECT * FROM dba_role_privs WHERE grantee=‘SYS‘;
2、自定义角色
1)创建角色
- 注意:
- BDA角色创建或者 需要具有create role 权限
- 在建立角色的时候,可以设置验证方式,如不验证、数据库验证等
- 不验证建立(一般都是这种)
- create role 角色名 not identified
- 数据库验证
- create role 角色名 identified by 密码;
2)给角色赋权限
- grant create session to 角色
3)实例
- create role myRole not identified;
- grant create session to myRole ;
- grant select on scott.emp to myRole ;
- grant myRole to sam_sho;
3、删除角色
- drop role 角色名;
(四)给用户赋权限
1、赋予直接的权限。如直接登录权限(create session)
- grant create session to sam_sho;
- grant select on emp to sam_sho;
2、直接分配角色,批量分配权限。如
- grant connect to sam_sho;
- 授于sam_sho connect的角色,即拥有登录的权限。connect,包含7 种权限。
- grant resource to sam_sho;
(五)用户的权限操作
1、赋权限:grant
1)语法:grant 权限(角色) to 用户名;
2)实例1:
- grant create table to sam_sho:赋予 sam_sho 创建表的权限。
- grant dba to sam_sho:赋予 sam_sho dba的角色,其自然具有创建表的角色。
3)实例2
- grant select on emp to sam_sho; 把emp表的查询权限赋予sam_sho
- SELECT * FROM scott.emp;可以查询,但是需要在表前面加上scott前缀。
2、收回权限:revoke
1)语法:
- revoke select on emp from sam_sho; 从sam_sho收回emp表的查询权限
2)注意:
- 谁授权,谁收回。或者DBA
- 系统权限,不是级联回收。
- 对象权限,是级联回收。
3、权限的传递
1)scott把emp表的查询权限赋予sam_sho,sam_sho再把这种权限传递给rabby_zho
2)语法:
- 对象权限使用 with grant option 进行传递
- grant select on emp to sam_sho with
grant option;(scott登录) - grant select on scott.emp to rabby_zho;(sam_sho登录)
- grant select on emp to sam_sho with
- 角色、系统权限使用 with admin option
- grant connect to sam_sho with
admin option;(scott登录) - grant connect to rabby_zho;
- grant connect to sam_sho with
3)回收
- 系统权限,不是级联回收。
- 对象权限,是级联回收。
五、方案(Schema)
1、问题:同一个数据库实例 DEV_SAM,创建了2个用户 A 和 B 。用户 A 创建表a_table,B创建表b_table。结果A 访问不了 b_table,B访问不了 a_table 。
2、解决:
- 当一个用户,创建好后,如果该用户创建了任意一个数据对象,这时,dbms就会创建一个对应的【方案】与该用户对应,并且该【方案】的名字与用户名一致。
- 在这样的机制下,同一个数据库实例,可以创建多张相同表名的表,但是同一个方案中表名是具有唯一性的。
- A 如果需要去访问 B方案下的数据,需要权限的转移。
- 语法:
- grant 权限 to 用户名 【with
grant option】 对象权限 - grant 权限 to 用户名 【with
admin option】系统权限
- grant 权限 to 用户名 【with
- 实例
- grant select on emp to sam_sho ;(scott登录)
- 使用的时候,需要带【方案】名:select * from scott.emp 。
- grant all on emp to sam_sho with grant option;可以转移
- grant select on scott.emp to sam2;
- grant select on emp to sam_sho ;(scott登录)
- 语法:
六、数据库的启动流程(远程登录)
(一)windows:
1、lsnrctl start (启动监听)
2、oradim -startup -sid 数据库实例名
- oradim -startup -sid orcl
3、附:查看windows系统的信息
- systeminfo
(二)Linux
1、lsnrctl start (启动监听)
2、sqlplus sys/change_on_install as sysdba
- sqlplus /nolog
- conn sys/change_on_install as sysdba
3、startup
七、Oracle的登录认证方式
(一)Windows
1、oracle登录认证在windows 和linux 下是不完全相同。
2、现象:
1)conn XXXX/CCC as sysdba; 登录成功,并且显示当前用户为 sys。
2)XXXX/CCC 可以任意,只要以 as sysdba 即可。
2、操作系统认证
1)如果【当前用户】属于本地操作系统的 ora_dba 组,即可通过操作系统认证。
2)当前用户,指目前操作系统使用的用户,可以简单通过windows 任务管理器查看。
3)操作系统的用户与组:
- 我的电脑-->右击管理-->本地用户和组-->用户,如用户 sam
- 我的电脑-->右击管理-->本地用户和组-->组,显示sam属于ora_dba组
3、oracle 数据库验证(密码文件验证)
1)对于普通用户:
- oracle默认使用数据库验证。
2)对于特权用户(比如 sys 用户,或以 as sysdba)
- oracle 默认使用操作系统认证,如果验证不通过,再到数据库验证。
- 通过配置 NETWORK\ADMIN\sqlnet.ora 文件,可以修改oracle登录认证方式。
- SQLNET.AUTHENTICATION_SERVICES= (NTS)
- NTS:基于系统,默认的。
- NONE:基于Oracle 验证
- NONE,NTS:二者都验证
- SQLNET.AUTHENTICATION_SERVICES= (NTS)
(二)Linux,略。
七、丢失 Oracle 管理员密码
1、恢复办法:把原有密码文件删除,生成一个新的密码文件
2、恢复步骤如下:
1)搜索名为 PWD+数据库实例名.ora 文件。一般在\database\PWDorcl.ora
2)删除该文件,建议备份。
3)生成新的密码文件,在doc 下输入命令:
- orapwd file = 原来密码文件的全路径\密码文件名.ora password=新密码 entries=10;
- entries=10:允许几个特权用户
- 密码文件名 一定要和原来的密码文件名一致。
4)重启生效
3、例子:
- orapwd file=D:\oracle10g\database\PWDorcl.ora password=abc123 entries=10;
八、数据库管理员