【數據庫】Oracle用戶、授權、角色管理

創建和刪除用戶是Oracle用戶管理中的常見操作,但這其中隱含了Oracle數據庫系統的系統權限與對象權限方面的知識。掌握還Oracle用戶的授權操作和原理,可以有效提升我們的工作效率。 Oracle數據庫的權限系統分為系統權限與對象權限。系統權限( Database System Privilege )可以讓用戶執行特定的命令集。例如,CREATE TABLE權限允許用戶創建表,GRANT ANY PRIVILEGE 權限允許用戶授予任何系統權限。對象權限( Database Object Privilege )可以讓用戶能夠對各個對象進行某些操作。例如DELETE權限允許用戶刪除表或視圖的行,SELECT權限允許用戶通過select從表、視圖、序列(sequences)或快照 (snapshots)中查詢信息。

  每個Oracle用戶都有一個名字和口令,并擁有一些由其創建的表、視圖和其他資源。Oracle角色(role)就是一組權限(privilege)(或者是每個用戶根據其狀態和條件所需的訪問類型)。用戶可以給角色授予或賦予指定的權限,然后將角色賦給相應的用戶。一個用戶也可以直接給其他用戶授權。

?

Oracle 權限設置


一、權限分類:
系統權限:系統規定用戶使用數據庫的權限。(系統權限是對用戶而言)。

實體權限:某種權限用戶對其它用戶的表或視圖的存取權限。(是針對表或視圖而言的)。

二、系統權限管理:
1、系統權限分類:
DBA: 擁有全部特權,是系統最高權限,只有DBA才可以創建數據庫結構。

RESOURCE:擁有Resource權限的用戶只可以創建實體,不可以創建數據庫結構。

CONNECT:擁有Connect權限的用戶只可以登錄Oracle,不可以創建實體,不可以創建數據庫結構。

對于普通用戶:授予connect, resource權限。
對于DBA管理用戶:授予connect,resource, dba權限。


2、系統權限授權命令:
[系統權限只能由DBA用戶授出:sys, system(最開始只能是這兩個用戶)]
授權命令:SQL> grant connect, resource, dba to 用戶名1 [,用戶名2]...;

[普通用戶通過授權可以具有與system相同的用戶權限,但永遠不能達到與sys用戶相同的權限,system用戶的權限也可以被回收。]

例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;

查詢用戶擁有哪里權限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;

刪除用戶:SQL> drop user 用戶名 cascade; //加上cascade則將用戶連同其創建的東西全部刪除


3、系統權限傳遞:
增加WITH ADMIN OPTION選項,則得到的權限可以傳遞。

SQL> grant connect, resorce to user50 with admin option; //可以傳遞所獲權限。


4、系統權限回收:系統權限只能由DBA用戶回收
命令:SQL> Revoke connect, resource from user50;


說明:

1)如果使用WITH ADMIN OPTION為某個用戶授予系統權限,那么對于被這個用戶授予相同權限的所有用戶來說,取消該用戶的系統權限并不會級聯取消這些用戶的相同權限。

2)系統權限無級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限不受影響;系統權限可以跨用戶回收,即A可以直接收回C用戶的權限。


三、實體權限管理
1、實體權限分類:select, update, insert, alter, index, delete, all //all包括所有權限
execute //執行存儲過程權限

user01:
SQL> grant select, update, insert on product to user02;
SQL> grant all on product to user02;

user02:
SQL> select * from user01.product;

// 此時user02查user_tables,不包括user01.product這個表,但如果查all_tables則可以查到,因為他可以訪問。


2. 將表的操作權限授予全體用戶:
SQL> grant all on product to public; // public表示是所有的用戶,這里的all權限不包括drop。

[實體權限數據字典]:
SQL> select owner, table_name from all_tables; // 用戶可以查詢的表
SQL> select table_name from user_tables; // 用戶創建的表
SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 獲權可以存取的表(被授權的)
SQL> select grantee, owner, table_name, privilege from user_tab_privs; // 授出權限的表(授出的權限)



3. DBA用戶可以操作全體用戶的任意基表(無需授權,包括刪除):
DBA用戶:
SQL> Create table stud02.product(
id number(10),
name varchar2(20));
SQL> drop table stud02.emp;

SQL> create table stud02.employee
as
select * from scott.emp;

4. 實體權限傳遞(with grant option):
user01:

SQL> grant select, update on product to user02 with grant option; // user02得到權限,并可以傳遞。



5. 實體權限回收:
user01:
SQL>Revoke select, update on product from user02; //傳遞的權限將全部丟失。


說明

1)如果取消某個用戶的對象權限,那么對于這個用戶使用WITH GRANT OPTION授予權限的用戶來說,同樣還會取消這些用戶的相同權限,也就是說取消授權時級聯的。



Oracle 用戶管理


一、創建用戶的Profile文件
SQL> create profile student limit // student為資源文件名
FAILED_LOGIN_ATTEMPTS 3 //指定鎖定用戶的登錄失敗次數
PASSWORD_LOCK_TIME 5 //指定用戶被鎖定天數
PASSWORD_LIFE_TIME 30 //指定口令可用天數


二、創建用戶
SQL> Create User username
Identified by password
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;

例:
SQL> Create user acc01
identified by acc01 // 如果密碼是數字,請用雙引號括起來
default tablespace account
temporary tablespace temp
profile default
quota 50m on account;
SQL> grant connect, resource to acc01;

[*] 查詢用戶缺省表空間、臨時表空間
SQL> select username, default_tablespace, temporary_tablespace from dba_users;

[*] 查詢系統資源文件名:
SQL> select * from dba_profiles;
資源文件類似表,一旦創建就會保存在數據庫中。
SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;

SQL> create profile common limit
failed_login_attempts 5
idle_time 5;

SQL> Alter user acc01 profile common;



三、修改用戶:
SQL> Alter User 用戶名
Identified 口令
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;

1、修改口令字:
SQL>Alter user acc01 identified by "12345";

2、修改用戶缺省表空間:
SQL> Alter user acc01 default tablespace users;

3、修改用戶臨時表空間
SQL> Alter user acc01 temporary tablespace temp_data;

4、強制用戶修改口令字:
SQL> Alter user acc01 password expire;

5、將用戶加鎖
SQL> Alter user acc01 account lock; // 加鎖
SQL> Alter user acc01 account unlock; // 解鎖



四、刪除用戶
SQL>drop user 用戶名; //用戶沒有建任何實體
SQL> drop user 用戶名 CASCADE; // 將用戶及其所建實體全部刪除

*1. 當前正連接的用戶不得刪除。


五、監視用戶:
1、查詢用戶會話信息:
SQL> select username, sid, serial#, machine from v$session;

2、刪除用戶會話信息:
SQL> Alter system kill session 'sid, serial#';

3、查詢用戶SQL語句:
SQL> select user_name, sql_text from v$open_cursor;


Oracle 角色管理

一、何為角色
  角色。角色是一組權限的集合,將角色賦給一個用戶,這個用戶就擁有了這個角色中的所有權限。

二、系統預定義角色
  預定義角色是在數據庫安裝后,系統自動創建的一些常用的角色。下介簡單的介紹一下這些預定角色。角色所包含的權限可以用以下語句查詢:
sql>select * from role_sys_privs where role='角色名';

1.CONNECT, RESOURCE, DBA
這些預定義角色主要是為了向后兼容。其主要是用于數據庫管理。oracle建議用戶自己設計數據庫管理和安全的權限規劃,而不要簡單的使用這些預定角色。將來的版本中這些角色可能不會作為預定義角色。



2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
這些角色主要用于訪問數據字典視圖和包。



3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
這兩個角色用于數據導入導出工具的使用。



4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。這兩個角色用于oracle高級查詢功能。



5. SNMPAGENT
用于oracle enterprise manager和Intelligent Agent



6.RECOVERY_CATALOG_OWNER
用于創建擁有恢復庫的用戶。關于恢復庫的信息,參考oracle文檔《Oracle9i User-Managed Backup and Recovery Guide》



7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.



三、管理角色
1.建一個角色
sql>create role role1;


2.授權給角色
sql>grant create any table,create procedure to role1;


3.授予角色給用戶
sql>grant role1 to user1;


4.查看角色所包含的權限
sql>select * from role_sys_privs;


5.創建帶有口令以角色(在生效帶有口令的角色時必須提供口令)
sql>create role role1 identified by password1;


6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;


7.設置當前用戶要生效的角色
(注:角色的生效是一個什么概念呢?假設用戶a有b1,b2,b3三個角色,那么如果b1未生效,則b1所包含的權限對于a來講是不擁有的,只有角色生效了,角色內的權限才作用于用戶,最大可生效角色數由參數MAX_ENABLED_ROLES設定;在用戶登錄后,oracle將所有直接賦給用戶的權限和用戶默認角色中的權限賦給用戶。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用帶有口令的role1生效
sql>set role all;//使用該用戶的所有角色生效
sql>set role none;//設置所有角色失效
sql>set role all except role1;//除role1外的該用戶的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看當前用戶的生效的角色。


8.修改指定用戶,設置其默認角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
詳見oracle參考文檔


9.刪除角色
sql>drop role role1;
角色刪除后,原來擁用該角色的用戶就不再擁有該角色了,相應的權限也就沒有了。



說明:

1)無法使用WITH GRANT OPTION為角色授予對象權限

2)可以使用WITH ADMIN OPTION 為角色授予系統權限,取消時不是級聯?

?

?

查詢用戶權限

數據字典

1、動態數據字典是以v$xxx開始的數據字典,在數據庫中約有150個左右,這些數據字典反映數據庫動態運行狀況,在不同時間查詢會得到不同的結果。

2、DBA數據字典是以DBA_xxx表示,該數據字典存儲數據庫結構,查詢DBA數據字典可以反映數據庫結構設置,管理磁盤空間和表空間、事務與回退段、用戶與表空間等信息。

3、用戶數據字典是以USER_xxx表示,這些數據字典反應用戶所創建的實體信息。如,USER_TABLES、USER_VIEWS,數據庫管理員具有操作全體用戶所有實體的權限,可以查詢這類數據字典,了解用戶所創建實體狀況,必要時可以將用戶創建的不正確的實體刪除。

4、ALL_xxx類數據字典,表示用戶所創建的實體及用戶有權可以存取的實體。


select privilege from dba_SYS_privs where grantee=‘USERNAME’


Oracle查詢用戶權限

-- 確定角色的權限
select * from role_tab_privs ; 包含了授予角色的對象權限
select * from role_role_privs ; 包含了授予另一角色的角色
select * from role_sys_privs ; 包含了授予角色的系統權限

-- 確定用戶帳戶所授予的權限
select * from DBA_tab_privs ; 直接授予用戶帳戶的對象權限
select * from DBA_role_privs ; 授予用戶帳戶的角色
select * from DBA_sys_privs ; 授予用戶帳戶的系統權限

查看當前用戶權限:
SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER

8 rows selected.

Oracle 本身的數據字典設計我個人覺得很合理, 因為DBA_xxx, ALL_xxx,USER_xxx 讓人一看大概就知道這個視圖是干什么用的. 本文簡要總結了一下與權限,角色相關的視圖.
一. 概述

與權限,角色相關的視圖大概有下面這些:

DBA_SYS_PRIVS: 查詢某個用戶所擁有的系統權限

USER_SYS_PRIVS: 當前用戶所擁有的系統權限

SESSION_PRIVS: 當前用戶所擁有的全部權限

ROLE_SYS_PRIVS: 某個角色所擁有的系統權限

注意: 要以SYS用戶登陸查詢這個視圖,否則返回空.

ROLE_ROLE_PRIVS: 當前角色被賦予的角色

SESSION_ROLES: 當前用戶被激活的角色

USER_ROLE_PRIVS: 當前用戶被授予的角色

另外還有針對表的訪問權限的視圖:

TABLE_PRIVILEGES

ALL_TAB_PRIVS?

ROLE_TAB_PRIVS: 某個角色被賦予的相關表的權限

...
二. Examples
1. 查詢當前用戶所擁有的權限

Select * from session_privs;
2. 查詢某個用戶被賦予的系統權限.

可以有多種方式

Select * from user_sys_privs;

或者: select * from DBA_SYS_PRIVS where grantee='XXX'

(需要當前用戶擁有DBA角色)
3. 查詢當前用戶被授予的角色:?

1. Select * from SESSION_ROLES order by ROLE

說明: 這個查詢會返回當前用戶所被授予的全部角色, 其中包括

嵌套授權的角色. 例如將DBA角色授予了一個用戶,DBA角色

已經被授予的角色(例如 exp_full_database 和 imp_full_database)

也會被查詢出來

2. Select * from USER_ROLE_PRIVS
4. 查詢某一角色被賦予的系統權限

Select Privilege from ROLE_SYS_PRIVS where ROLE=&Role

輸入 role='CONNECT'

輸出:
PRIVILEGE
--------------------
ALTER SESSION
CREATE CLUSTER
CREATE DATABASE LINK
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE VIEW
5. 查詢當前角色被授予的角色?

Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE

輸入 role= 'DBA'

輸出:

GRANTED_ROLE
----------------------
DELETE_CATALOG_ROLE
EXECUTE_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
PLUSTRACE
SELECT_CATALOG_ROLE

說明: PLUSTRACE這個角色是用于執行SQL AUTO TRACE的, 通過執行

$ORACLE_HOME/sqlplus/admin/plustrce.sql可以生成這個角色.

-------------------------------------------------------------------------------------------------------------------------------------------------------------

如何查看oracle用戶權限?


ORACLE數據字典視圖的種類分別為:USER,ALL 和 DBA。?

  USER_*:有關用戶所擁有的對象信息,即用戶自己創建的對象信息?

  ALL_*:有關用戶可以訪問的對象的信息,即用戶自己創建的對象的信息加上

其他用戶創建的對象但該用戶有權訪問的信息?

  DBA_*:有關整個數據庫中對象的信息?

  (這里的*可以為TABLES,INDEXES,OBJECTS,USERS等。)?

  1、查看所有用戶?

  select * from dba_user;?

  select * from all_users;?

  select * from user_users;?

  2、查看用戶系統權限?

  select * from dba_sys_privs;?

  select * from all_sys_privs;?

  select * from user_sys_privs;?

  3、查看用戶對象權限?

  select * from dba_tab_privs;?

  select * from all_tab_privs;?

  select * from user_tab_privs;?

  4、查看所有角色?

  select * from dba_roles;?

  5、查看用戶所擁有的角色?

  select * from dba_role_privs;?

  select * from user_role_privs;?

  6、查看當前用戶的缺省表空間?

  select username,default_tablespace from user_users;?

  7、查看某個角色的具體權限?

  如grant connect,resource,create session,create view to TEST;?

  8、查看RESOURCE具有那些權限?
  用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';

轉載于:https://www.cnblogs.com/RexTooru/p/7810516.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390859.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390859.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

商業數據科學

數據科學 , 意見 (Data Science, Opinion) “There is a saying, ‘A jack of all trades and a master of none.’ When it comes to being a data scientist you need to be a bit like this, but perhaps a better saying would be, ‘A jack of all trades and …

為什么游戲開發者不玩游戲_什么是游戲開發?

為什么游戲開發者不玩游戲Game Development is the art of creating games and describes the design, development and release of a game. It may involve concept generation, design, build, test and release. While you create a game, it is important to think about t…

leetcode 692. 前K個高頻單詞

題目 給一非空的單詞列表,返回前 k 個出現次數最多的單詞。 返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。 示例 1: 輸入: ["i", "love", "leetcode", "…

數據顯示,中國近一半的獨角獸企業由“BATJ”四巨頭投資

中國的互聯網行業越來越有被巨頭壟斷的趨勢。百度、阿里巴巴、騰訊、京東,這四大巨頭支撐起了中國近一半的獨角獸企業。CB Insights日前發表了題為“Nearly Half Of China’s Unicorns Backed By Baidu, Alibaba, Tencent, Or JD.com”的數據分析文章,列…

Java的Servlet、Filter、Interceptor、Listener

寫在前面: 使用Spring-Boot時,嵌入式Servlet容器可以通過掃描注解(ServletComponentScan)的方式注冊Servlet、Filter和Servlet規范的所有監聽器(如HttpSessionListener監聽器)。 Spring boot 的主 Servlet…

html5教程_最好HTML和HTML5教程

html5教程HyperText Markup Language (HTML) is a markup language used to construct online documents and is the foundation of most websites today. A markup language like HTML allows us to超文本標記語言(HTML)是用于構造在線文檔的標記語言,并且是當今大…

leetcode 1035. 不相交的線(dp)

在兩條獨立的水平線上按給定的順序寫下 nums1 和 nums2 中的整數。 現在,可以繪制一些連接兩個數字 nums1[i] 和 nums2[j] 的直線,這些直線需要同時滿足滿足: nums1[i] nums2[j] 且繪制的直線不與任何其他連線(非水平線&#x…

SPI和RAM IP核

學習目的: (1) 熟悉SPI接口和它的讀寫時序; (2) 復習Verilog仿真語句中的$readmemb命令和$display命令; (3) 掌握SPI接口寫時序操作的硬件語言描述流程(本例僅…

個人技術博客Alpha----Android Studio UI學習

項目聯系 這次的項目我在前端組,負責UI,下面簡略講下學到的內容和使用AS過程中遇到的一些問題及其解決方法。 常見UI控件的使用 1.TextView 在TextView中,首先用android:id給當前控件定義一個唯一標識符。在活動中通過這個標識符對控件進行事…

數據科學家數據分析師_站出來! 分析人員,數據科學家和其他所有人的領導和溝通技巧...

數據科學家數據分析師這一切如何發生? (How did this All Happen?) As I reflect on my life over the past few years, even though I worked my butt off to get into Data Science as a Product Analyst, I sometimes still find myself begging the question, …

leetcode 810. 黑板異或游戲

黑板上寫著一個非負整數數組 nums[i] 。Alice 和 Bob 輪流從黑板上擦掉一個數字,Alice 先手。如果擦除一個數字后,剩余的所有數字按位異或運算得出的結果等于 0 的話,當前玩家游戲失敗。 (另外,如果只剩一個數字,按位異…

react-hooks_在5分鐘內學習React Hooks-初學者教程

react-hooksSometimes 5 minutes is all youve got. So in this article, were just going to touch on two of the most used hooks in React: useState and useEffect. 有時只有5分鐘。 因此,在本文中,我們僅涉及React中兩個最常用的鉤子: …

分析工作試用期收獲_免費使用零編碼技能探索數據分析

分析工作試用期收獲Have you been hearing the new industry buzzword — Data Analytics(it was AI-ML earlier) a lot lately? Does it sound complicated and yet simple enough? Understand the logic behind models but dont know how to code? Apprehensive of spendi…

select的一些問題。

這個要怎么統計類別數呢? 哇哇哇 解決了。 之前怎么沒想到呢?感謝一樓。轉載于:https://www.cnblogs.com/AbsolutelyPerfect/p/7818701.html

html5語義化標記元素_語義HTML5元素介紹

html5語義化標記元素Semantic HTML elements are those that clearly describe their meaning in a human- and machine-readable way. 語義HTML元素是以人類和機器可讀的方式清楚地描述其含義的元素。 Elements such as <header>, <footer> and <article> …

重學TCP協議(12)SO_REUSEADDR、SO_REUSEPORT、SO_LINGER

1. SO_REUSEADDR 假如服務端出現故障&#xff0c;主動斷開連接以后&#xff0c;需要等 2 個 MSL 以后才最終釋放這個連接&#xff0c;而服務重啟以后要綁定同一個端口&#xff0c;默認情況下&#xff0c;操作系統的實現都會阻止新的監聽套接字綁定到這個端口上。啟用 SO_REUSE…

殘疾科學家_數據科學與殘疾:通過創新加強護理

殘疾科學家Could the time it takes for you to water your houseplants say something about your health? Or might the amount you’re moving around your neighborhood reflect your mental health status?您給植物澆水所需的時間能否說明您的健康狀況&#xff1f; 還是…

POJ 3660 Cow Contest [Floyd]

POJ - 3660 Cow Contest http://poj.org/problem?id3660 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is un…

Linux 網絡相關命令

1. telnet 1.1 檢查端口是否打開 執行 telnet www.baidu.com 80&#xff0c;粘貼下面的文本&#xff08;注意總共有四行&#xff0c;最后兩行為兩個空行&#xff09; telnet [domainname or ip] [port]例如&#xff1a; telnet www.baidu.com 80 如果這個網絡連接可達&…

JSON.parseObject(String str)與JSONObject.parseObject(String str)的區別

一、首先來說說fastjson fastjson 是一個性能很好的 Java 語言實現的 JSON 解析器和生成器&#xff0c;來自阿里巴巴的工程師開發。其主要特點是&#xff1a; ① 快速&#xff1a;fastjson采用獨創的算法&#xff0c;將parse的速度提升到極致&#xff0c;超過所有基于Java的jso…