oracle,创建⽤户,授予⽤户各种权限;ORA-01939错误;ORA-
01950错误;。。。
...
3个默认的⽤户:
sys orcl [as sysdba]
system orcl
scott tiger
创建⽤户:
create user gis /*⽤户名*/ identified by gis /*密码*/ ;
PRIVILEGE:权限
系统权限:
grant(revoke) create session to(from) gis;
grant(revoke) create table to(from) gis;
grant(revoke) unlimited tablespace to(from) gis;
grant create seesion to public; #将权限授予所有⽤户。
select * from user_sys_privs; 查看当前⽤户的系统权限。
对象权限:
grant(revoke) select on mytable to(from) gis;
grant(revoke) all on mytable to(from) gis;
select * from user_tab_privs; #查看当前⽤户的表的对象权限:
对象权限可以控制到列(只能插⼊和更新控制到列):
select * from user_col_privs;  #查看当前⽤户的列的对象权限:
1) grant update(name) on mytable to sagittys;  #在gis⽤户上将mytable表的name列更新权限给sagittys⽤户
able set name='laowang' where id=1;
commit;
2) grant insert(id) on mytable to sagittys;
insert able(id) values(7);
GRANTEE  OWNER  TABLE_NAME    GRANTOR    PRIVILEGE                    GRA HIE
----- ------------------------------ ------------------------------ --
GIS        SAGITTYS    SA            SAGITTYS        FLASHBACK                  NO  NO
GIS        SAGITTYS    SA            SAGITTYS        DEBUG                          NO  NO
GIS        SAGITTYS    SA            SAGITTYS        QUERY REWRITE            NO  NO
GIS        SAGITTYS    SA            SAGITTYS        ON COMMIT REFRESH      NO  NO
GIS        SAGITTYS    SA            SAGITTYS        REFERENCES                  NO  NO
GIS        SAGITTYS    SA            SAGITTYS        UPDATE    #更新              NO  NO
GIS        SAGITTYS    SA            SAGITTYS        SELECT    #查询              NO  NO
GIS        SAGITTYS    SA            SAGITTYS        INSERT    #插⼊              NO  NO
GIS        SAGITTYS    SA            SAGITTYS        INDEX    #索引                NO  NO
GIS        SAGITTYS    SA            SAGITTYS        DELETE    #删除              NO  NO
GIS        SAGITTYS    SA            SAGITTYS        ALTER    #修改                NO  NO
(在CMD中默认宽度到头了则不会规则的显⽰,此时将宽度设为400,set linesize 400,就ok了)
语⾔分类:
1、 DLL,数据定义语⾔
CREATE,CREATE TABLE abc(a varchar(10),b char(10));
ALTER,ALTER TABLE abc ADD c NUMBER; 加⼀个c的字段,数据符为NUMBER。ALTER TABLE abc DROP COLUMN c;
DROP,DROP TABLE abc
2、 DCL,数据控制语⾔
GRANT,授权  GRANT SELECT ON dept TO sde;#让sde⽤户可以选择dept表
REVOKE,授权收回  REVOKE SELECT ON dept FROM sde;
3、 DML,数据操作语⾔ (增删改查)  最后需要保存提交:commit;
SELECT,  SELECT * FROM ABC;
INSERT,  INSERT INTO ABC(A,B) VALUES(‘XF’,’SDE’);
DELETE,  DELETE FROM ABC;删除表中所有数据。
DELETE FROM ABC WHERE A =’ORCL’;
UPDATE,  UPDATE ABC SET B=’AAA’; 将表中B的数值全部改成AAA
UPDATE ABC SET B=’AAA’ WHERE A =’XF’;将A=XF⾏B值修改。
权限传递:
1、系统权限传递
SYS⽤户将系统权限授予A⽤户,A⽤户将此权限授予B⽤户;
grant alter any table to gis;
如下显⽰:
USERNAME    PRIVILEGE        ADM
-------------------------- ----------
GIS        ALTER ANY TABLE    NO
#admin为no,说明不带有管理员选项,不能传递系统权限。
作出如下更改:
grant alter any table to gis with admin option;
则显⽰:
USERNAME    PRIVILEGE        ADM
-------------------------- ----------
GIS        ALTER ANY TABLE    YES
#admin为yes,此时带有管理员选项,可以传递系统权限。
同理,通过grant alter any table to sagittys with admin option;
可以让sagittys继续传递权限
此时,如果sys将授予GIS⽤户的ALTER ANY TABLE权限撤销了,sagittys依然拥有该权限。
2、对象权限传递
session数据错误是什么意思A⽤户将对象权限授予B,B⽤户将此权限授予C⽤户;
与系统权限传递类似,⽤grant select on mytable to sagittys with grant option;
可以将对象权限传递下去。
但是,如果GIS⽤户将select on mytable权限撤销了,则之后传递的⽤户都没有该权限了。
⾓⾊管理
⾓⾊:权限的集合
create role myrole;      创建⾓⾊;  drop role myrole;  删除⾓⾊;
grant create session to myrole;
grant create table to myrole;    #给⾓⾊授权
grant myrole to gis;                #将⾓⾊授予⽤户。
注意:有些系统权限很⾼很特殊,⽆法直接赋予⾓⾊。
如:unlimited tablespace/*权限太⼤了,可以使⽤任何的表空间,不要轻易使⽤*/
create table(包含下2⾏权限)  create any table;
alter table (⽆此权限)              alter any table
drop  table (⽆此权限)            drop  any table  /*加上any,可以修改(创建)其他⽤户的表*/表是属于某⼀个⽤户的,⽽⾓⾊不属于任意⼀个⽤户,是⼤家公⽤的。
丢失管理员的密码怎么办?
⽤sys管理员修改普通户⽤密码:
alter user scott identified by tiger; #将scott⽤户密码改为tiger。
数据库的三种验证机制:
1、操作系统验证
2、密码⽂件验证
3、数据库验证
具有sysoper和sysdba⽤户可以在数据库还没启动的时候就连⼊数据库将之启动。
它们采⽤的是操作系统验证和密码⽂件验证。
linux下oracle的启动过程:
1、lsnrctl  start  #启动监听,接受⽤户请求。
2、sqlplus sys/orcl as sysdba  #是DBA,采⽤操作系统验证和密码⽂件验证。
在低版本的oracle中只能这样:sqlplus/nolog /*启动sqlplus⽽不登陆*/
conn sya/orcl as sysdba;
3、startup        #打开数据库实例
如果是普通⽤户,则只能⽤数据库验证,在实例没有打开之前是不可能启动的。
⽤sysdba连接数据库时,可以不输⼊⽤户密码直接登录,如sqlplus / as sysdba
这是因为,在计算机管理--⽤户和组--组中的ORA_DBA中默认存在当前的操作系统登陆者。
由于sysdba采⽤操作系统验证和密码⽂件验证,因此sqlplus默认当前操作系统管理员就是
oracle的DBA,除⾮将ORA_DBA组中的登录⽤户名删除。
当将ORA_DBA组中的登录⽤户名删除之后,sysdba只能采⽤第⼆种验证⽅式,即密码⽂件验证。此时如果sys的密码丢失了,
则在E:"oracle"product"10.2.0"db_1"database中将a(密码⽂件)删掉
在cmd下输⼊orapwd,显⽰出提⽰:
Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
file - name of password file (mand)                设置密码⽂件的路径
password - password for SYS (mand)            设置sys的密码
entries - maximum number of distinct DBA    设置DBA权限的最⼤数量
force - whether to overwrite existing file        询问是否强制覆盖,可不填写
具体如下:
orapwd file=E:"oracle"product"10.2.0"db_1"a password=orcl entries=10
此时重新⽣成了密码⽂件。
使⽤语句select * from v$pwfile_users; 可以看出在a中有多少特权⽤户。
完整的创建表的语句:
create user abc identified by abc default tablespace users temporary tablespace temp quota 50m on users;在⽅案中查看⽤户的表的信息。
删除⽤户的时候,如果⽤户下有表存在,则只能强制删除:
drop user sagittys cascade;  /*cascade关键字表⽰删除⽤户所有对象*/
Oracle 10g 的创建⽤户名
1、  linux 下 oracle 的启动
以 oracle ⾝份登录
启动    lsnrctl start
登录    sqplus /nolog
连接数据库    connect  /as  sysdba
启动数据库    startup
关闭数据库    shutdown immediate
2、在数据中创建⽤户名
启动数据库后创建⽤户名
连接超级⽤户    connect system/admin    system 系统⽤户名字  admin 密码
创建⽤户名字    create user sha identified by admin  ⽤户名: sha 密码 :admin
可以写    Default tablespace user  // 指定存储对象使⽤的默认空间表默认是 system
Temporary tablespace temp; // 保存临时对象所使⽤的空间表默认是 system
上⾯的俩⾏,可以写空间表为 user 临时为 temp ;不写就默认
3、添加⽤户的权限
Grant 是授予权限的如:
Grant create session to sha ; // 授予 sha 连接数据的权限
系统权限如下:
系统特权允许执⾏的操作
Create session连接数据库
Create sequence创建序列
Create synonym创建同名对象
Create table创建表
Create any table创建任何模式的表
Drop table删除表
Create procedure创建存储过程
Execute any procedure执⾏任何模式的存储过程
Create user创建⽤户
Create view创建视图
Drop user删除⽤户
Drop any table删除任何模式的表
4、向⽤户授予系统特权
Grant execute any procedure to sha with admin option
此句意思为为 sha ⽤户创建系统特权并且可以⽤ sha 为别的⽤户授予权限连接 sha ⽤户  connect sha/admin
可以创建别的⽤户
5 、查看⽤户权限
进⼊ sha ⽤户 connect sha/admin
Select * from user_sys_privs; 可以查看到⼀个列表,
列代表⽤户名权限是否可以给别的⽤户附加权限( N 、 Y )
⾏代表权限都有那些
6 、撤销⽤户授予的权限
必须连接 connect system/admin
撤销权限  revoke 是系统撤销权限的关键词
Revoke execute any procedure from sha ;
7 、更改⽤户密码
进⼊ sha ⽤户  connect sha/admin
Password      输⼊旧密码输⼊新密码俩边    OK
或者⽤ alter user sha identified by xinmima
8 、删除⽤户
Connect system/admin
Drop user sha ;
9 、为⽤户授予⾓⾊
Grant dba to sha ;
Grant connect to sha ;
Linux 下的 plsql  创建⽤户
create user sha identified by admin
Default tablespace user
Temporary tablespace temp;
Granr unlimited tablespace to sha ;      // 权限
Grant dba to sha ;                  // ⾓⾊
Grant connect to sha ;
创建⽤户
CREATE USER user_name IDENTIFIED BY password;
DROP USER user_name [cascade];--⽤户下有对象的时候,需要级联删除 ALTER USER user_name ACCOUNT [UN]LOCK;
grant xxx to user_name;
revoke xxx from user_name;
grant create session to u3 identified by u3;
conn u3/u3----> disconnect---->conn
exit--->disconnect--->exit
kill⽤户会话信息:
select username,sid,serial# from v$session where username='u3';
alter system kill session 'aa,bb';
修改⽤户在某个表空间上得配额:
alter user u3 quota unlimited on users;
什么是权限
权限就是⽤来控制特定的⽤户发送特定的SQL语句是否允许正确的执⾏在多⽤户环境,DBA需要维护数据库访问的安全
以确保特定⽤户拥有特定的操作权限
数据库的权限分为
系统权限
对象权限
系统权限
⼤部分是针对对象的创建,删除,修改,审计等等的操作
查看系统都具备哪些权限
select distinct PRIVILEGE from dba_sys_privs;
create any table;
create table;
select any table
select
查看当前会话都具备哪些权限
select * from session_privs;
对象权限---为DML做的⼀些权限(DML+执⾏)
对象的创建者、级联的委托权限、管理员才能授权
授予特定⽤户对特定对象的权限
特定对象:表、视图、序列、过程、函数、程序包上。
grant unlimited tablespace on u4;
grant select p on u4;
⾓⾊--⼀个或者⼀组权限的集合
将⾓⾊授予⽤户,⽤户会具备⾓⾊中的所有权限
系统中有166个权限我们不便于管理
于是oracle对很多需求的权限定义成了⾓⾊的模式来⽅便我们管理
⾓⾊就是⼀组权限的集合
我们也可以⾃⼰建⽴包含⾃⼰拟定权限的⾓⾊
查看oracle给你定制了哪些⾓⾊
select distinct GRANTEd_role  from dba_role_privs ;
create role r1;
向⾓⾊添加或减少权限:
grant XXX to role_name;
revoke XXX from role_name;
⾓⾊的授予:
grant role_name to user_name;
revoke role_name from user_name;
普通⽤户查看⾃⼰具备的权限和⾓⾊:
select * from session_privs;
select * from session_roles;
管理员查看⽤户具备的权限和⾓⾊:
什么东西可以授予⽤户:
权限
⾓⾊
什么可以授予⾓⾊
权限
⾓⾊--这时候权限会累加

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。