Thứ Bảy, 22 tháng 2, 2020

HỌC ORACLE DB TỪ A-Z - BÀI 19: CÁC QUYỀN HỆ THỐNG

19.1.PHÂN LOẠI QUYỀN
Oracle database có khoảng 80 quyền hệ thống và con số này đang tiếp tục tăng lên.
Các quyền hệ thống có thể chia ra như sau:
§  Các quyền cho phép thực hiện các thao tác mức độ rộng trên hệ thống ví dụ như: CREATE SESSION, CREATE TABLESPACE.
§  Các quyền cho phép quản lý các đối tượng thuộc về một user ví dụ: CREATE TABLE
§  Các  quyền cho phép quản lý các đối tượng trong bất cứ một schema nào ví dụ câu lệnh: CREATE ANY TABLE.
Có thể điều khiển các quyền bằng cách câu lệnh GRAND hay REVOKE.

Chú ý:
Các users có quyền ANY đều có thể truy xuất các bảng thuộc data dictionary ngoại trừ các tiền tố USER_ALL và bất cứ views nào trên đó các quyền được gán cho PUBLIC.

19.1.1.  Các quyền hệ thống

Phân loại
Ví dụ

INDEX
CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX



TABLE
CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
SELECT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE

SESSION
CREATE SESSION
ALTER SESSION
RESTRICTED SESSION


TABLESPACE
CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE

§  Không có quyền CREATE INDEX
§  Các quyền như CREATE TABLE, CREATE PROCEDURE, CREATE CLUSTER bao gồm cả các quyền xoá các đối tượng đó.
§  CREATE TABLE  bao gồm các quyền CREATE INDEXANALYZE, Các user cần có đủ quota trên tablespace hay phải được gán UNLIMITED  TABLESPACE .
§  Để truncate các bảng thì quyền DROP ANY TABLE được sử dụng.

19.1.2.  Gán các quyền hệ thống

Sử dụng cú pháp sau đây để gán quyền hệ thống cho user
Cú pháp:
GRANT {system_priv|role}
[, {system_priv|role} ]...
TO {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[WITH ADMIN OPTION]
Với:
system_priv     chỉ định quyền hệ thống sử dụng
role                              chỉ định tên chức danh được gán
PUBLIC                      gán quyền hệ thống cho tất cả các user
WITH ADMIN OPTION 
cho phép user được gán quyền có thể gán
quyền hay chức danh đó cho user khác.
Ví dụ:                             
GRANT CREATE SESSION, CREATE TABLE
TO user1;
Hoặc
GRANT CREATE SESSION TO scott
WITH ADMIN OPTION;

Một số hướng dẫn
§  Để có quyền hệ thống, user cần được gán quyền có kèm thêm tuỳ chọn  WITH ADMIN OPTION.
§  Người được gán với tuỳ chọn WITH ADMIN OPTION có thể tiếp tục gán cho một user khác quyền hệ thống với WITH ADMIN OPTION.
§  Bất cứ một user nào có quyền GRANT ANY ROLE có thể gán bất kì quyền nào trong database.
§  Người được gán với tuỳ chọn WITH ADMIN OPTION có thể gán quyền hay lấy lại các quyền từ  bất cứ user hay role nào trong database.

19.1.3.  Xác nhận user bằng  password file                      

Trong chương quản lý database, ta đã biết đến hai quyền hệ thống là SYSDBASYSOPER. Các quyền này được sử dụng chỉ định rằng việc xác lập user thông qua password file.
Chỉ có người quản trị hệ thống mới có thể có khả năng connect vào database với quyền quản trị. Kết nối với quyền  SYSDBA sẽ cho phép user có quyền thực thi không giới hạn đối với các hoạt động trên database hay đối tượng trong database.

Bảng sau đây phân biệt giữa hai loại quyền SYSDBA và SYSOPER
Phân loại
Ví dụ



SYSOPER
STARTUP
SHUTDOWN
ALTER DATABASE OPEN | MOUNT
ALTER DATABASE BACKUP CONTROLFILE
ALTER TABLESPACE BEGIN/END BACKUP
RECOVER DATABASE,
ALTER DATABASE ARCHIVELOG
RESTRICTED SESSION

SYSDBA
SYSOPER privileges WITH ADMIN OPTION
CREATE DATABASE
RECOVER DATABASE UNTIL
Sau khi tạo password file bằng công cụ password và khởi tạo tham số trong initialization file:
REMOTE_LOGIN_PASSWORD_FILE=EXCLUSIVE
Người quản trị hệ thống có thể thêm các user  vào trong password file bằng cách gán các quyền SYSDBASYSOPER cho user.
Tuỳ chọn WITH ADMIN OPTION không được sử dụng cho việc gán các quyền này. Chỉ có user hiện đang được nối đến database với quyền SYSDBA mới có thể gán và lấy lại SYSDBA hay SYSOPER cho các user khác. Các quyền này không thể được gán cho một role bởi vì các role không tồn tại khi database startup.

View V$PWFILE_USERS chứa thông tin về các user được gán quyền SYSDBASYSOPER.
SVRMGR> SELECT * FROM v$pwfile_users;

USERNAME                       SYSDB           SYSOP
-----------------                        ---------  -----------
INTERNAL                         TRUE              TRUE
SYS                                      TRUE              TRUE
2 rows selected.


19.1.4.  Thông tin về các quyền

Thông tin về các quyền được lấy từ các view data dictionary: DBA_SYS_PRIVSSESSION_PRIVS.
Các thông tin bao gồm:
§  DBA_SYS_PRIVS: GRANTEE, PRIVILEGE, ADMIN OPTION
§  SESSION_PRIVS: PRIVILEGE

Ví dụ:
Lịêt kê các quyền hệ thống được gán cho user và role:
SVRMGR>SELECT * FROM DBA_SYS_PRIVS;

GRANTEE        PRIVILEGE                           ADM
----------               ---------------                             -----
...
SCOTT              SELECT ANY TABLE          NO
SYS                    DELETE ANY TABLE         NO
SYS                    EXECUTE ANY TYPE         NO
SYS                    INSERT ANY TABLE           NO
SYS                    SELECT ANY SEQUENCE NO
SYS                    SELECT ANY TABLE          YES
SYS                    UPDATE ANY TABLE         NO
SYSTEM           UNLIMITED TABLESPAC YES
...

View SESSION_PRIVS liệt kê các quyền có sẵn cho session hiện tại cho một user.
SVRMGR> SELECT * FROM session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
ALTER SESSION
CREATE TABLE
SELECT ANY TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
12 rows selected.

19.2.QUẢN LÝ QUYỀN

19.2.1.  Thu hồi các quyền hệ thống

Sử dụng cú pháp sau đây để lấy lại các quyền hệ thống.
Cú pháp:
REVOKE {system_priv|role}
[, {system_priv|role} ]...
FROM {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
Ví dụ:
REVOKE CREATE TABLE FROM user1;

Hoặc:
REVOKE CREATE SESSION FROM scott;

Chú ý:
§  Câu lệnh REVOKE chỉ có thể lấy lại quyền của mà đã được gán trực tiếp bằng câu lệnh GRANT.
§  Thu hồi các quyền hệ thống có thể ảnh hưởng đến một số các đối tượng phụ thuộc. Ví dụ: nếu quyền SELECT ANY TABLE được gán cho user và user đó được gán các thủ tục hay view mà sử dụng các bảng thuộc về các user khác thì việc lấy lại các quyền sẽ làm cho các thủ tục hay view đó trở nên không hợp lệ.

Thu hồi các quyền sử dụng có WITH ADMIN OPTION
Hai hình dưới đây sử minh hoạ việc thu hồi các quyền hệ thống sử dụng WITH ADMIN OPTION.
Hình vẽ 1.    Thu hồi quyền – trước khi thu hồi

Hình vẽ 2.    Thu hồi quyền – sau khi thu hồi
Không có sự ảnh hưởng lan truyền khi thu hồi quyền hệ thống, khi sử dụng tuỳ chọn WITH ADMIN OPTION.

19.2.2.  Quyền trên các đối tượng

Mỗi quyền trên đối tượng được gán cho phép người dùng được gán thực thi một số thao tác trên đối tượng, bảng dưới đây liệt kê các quyền có thể được gán trên một đối tượng.
Quyền
Table
View
Sequence
Procedure
ALTER
X

X

DELETE
X
X


EXECUTE



X
INDEX
X



INSERT
X
X


REFERENCES
X



SELECT
X
X
X

UPDATE
X
X


19.2.3.  Gán các quyền trên đối tượng

Sử dụng cú pháp sau đây để gán một quyền trên đối tượng.
Cú pháp:
GRANT { object_priv [(column_list)]
[, object_priv [(column_list)] ]...
|ALL [PRIVILEGES]}
ON [schema.]object
TO {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[WITH GRANT OPTION]
Với:
object_priv                  chỉ định quyền đối tượng được gán column_list chỉ định các cột của một bảng hay view (tuỳ chọn này chỉ sử dụng khi gán các quyền INSERT,REFERENCES hay UPDATE.
ALL                            gán tất cả các quyền cho đối tượng mà đã được gán với WITH ADMIN OPTION.
ON object                    chỉ định đối tượng trên đó các quyền được gán .
WITH GRANT OPTION
cho phép người được gán quyền có thể gán các quyền đó cho một user khác.
Lưu ý:
§  Để gán các quyền, các đối tượng phải thuộc về schema của user gán hoặc cần có quyền WITH GRANT OPTION.
§  Mặc định nếu một object thuộc về một user nào đó thì user đó có đầy đủ các quyền trên đối tượng đó.
§  Tuỳ chọn WITH ADMIN OPTION không dùng cho việc gán các quyền cho các chức danh.

19.2.4.  Thông tin về các quyền

Thông tin về các quyền được lưu trữ trong các data dictionary.
Một số thông tin ta cần quan tâm:
§  DBA_TAB_PRIVS: GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, GRANTABLE
§  DBA_COL_PRIVS: GRANTEE, OWNER, TABLE_NAME, COLUMN_NAME, GRANTOR, PRIVILEGE, GRANTABLE

Truy vấn thông tin trên bảng DBA_TAB_PRIVS để lấy thông tin về các quyền trên đối tượng được gán cho user.
svrmgr> SELECT * FROM dba_tab_privs
      2> WHERE GRANTEE=’SCOTT’

GRANTEE     OWNER TABLE_NAME                  GRA               PRIVILEGE   GRA
---------             -----         -----------             -----            ----------            -----
SCOTT           SYS        RESUMES         SYS           READ             NO
1 row selected.

19.2.5.  Thu hồi các quyền trên đối tượng

Sử dụng cú pháp sau đây để lấy lại quyền đã cấp.
Cú pháp:
REVOKE { object_priv
[, object_priv ]...
|ALL [PRIVILEGES] }
ON [schema.]object
FROM {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[CASCADE CONSTRAINTS]
Với:
object_pri                    chỉ định quyền trên đối tượng đã được gán
ALL                            thu hồi toàn bộ các quyền trên đối tượng đã được gán cho user.
ON                              chỉ định đối tượng trên đó các quyền trên đối tượng được thu hồi.
FROM                         chỉ định user hay role bị thu hồi quyền.
CASCADE CONSTRAINTS
xoá tất cả các tham chiếu mà việc thu hồi đã được định nghĩa do sử dụng quyền REFERENCES hay ALL.
Ví du:
REVOKE execute ON dbms_pipe
FROM scott;

Lấy lại các quyền đối tượng khi sử dụng mệnh đề WITH GRANT OPTION
Việc thu hồi các quyền đối tượng sẽ dẫn đến các việc thu hồi các quyền lan truyền. Hình sau minh hoạ quá trình lan truyền đó:
Hình vẽ 3.    Thu hồi quyền trên đối tượng – trước khi thu hồi
Hình vẽ 4.    Thu hồi quyền trên đối tượng – sau khi thu hồi



@ Trần Văn Bình - Founder of Oracle DBA AZ
#học oracle #oracle database #khóa học oracle online #khóa học oca #học oca ở đâu #oca là gì #oca oracle #BossData #OraAz #OracleDBAAz #OracleTutorial #Quản_trị_cơ_sở_dữ_liệu_Oracle #OracleDBA #OracleDatabaseAdministration

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master