Create New User

Một trong những task phổ biến nhất của DBA là tạo mới và quản trị user. Bài viết này tổng hợp và hướng dẫn cách tạo mới một User trong Oracle và cấp quyền làm việc cho user mới này.

Chúng ta cần phân biệt được khái niệm giữa User và Schema. Ở đây, việc lưu trữ vật lý các đối tượng dữ liệu của Schema (như table, indexes, clusters) được thực hiện bởi các Tablespace, 1 Tablespace có thể lưu dữ liệu của nhiều Schema và các đối tượng dữ liệu trong 1 Schema có thể được lưu trữ trong nhiều Tablespace khác nhau tùy theo mô hình dữ liệu.

  • User: là một tài khoản trong cơ sở dữ liệu Oracle, sau khi được khởi tạo và gán quyền bằng lệnh CREATE USER thì tài khoản này được phép đăng nhập và sở hữu một schema trong cơ sở dữ liệu
  • Schema: là 1 tập hợp các đối tượng trong cơ sở dữ liệu Oracle được quản lý bởi 1 user nào đó, các đối tượng của schema có thể là table, view, stored procedures, index, sequence… Schema được tự động tạo cùng với user khi thực thi lệnh CREATE USER.

Mối quan hệ giữa User và Schema là quan hệ 1 – 1, một User chỉ quản lý 1 Schema, và cũng chỉ có 1 Schema được khởi tạo khi thực thi lệnh CREATE USER.

Tạo mới User

Sử dụng lệnh CREATE USER để thêm mới một user như sau:

CREATE USER myuser IDENTIFIED BY p@ssword
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users
QUOTA 100M ON my_data;

Ví dụ trên ta tạo mới một user tên là MYUSER và mật khẩu là p@ssword. Tiếp chúng ta sử dụng tablespace mặc định USERS. Tablespace tạm thời là TEMP.

Chúng ta có thể điều khiển được dung lượng một user sử dụng trong một tablespace. Ở ví dụ trên chúng ta định nghĩa quotas cho user trên 2 tablespace khác nhau. Một là quota không giới hạn trên tablespace mặc định USERS. Hai là, giới hạn quota cho MYUSER 100M trên MY_DATA tablespace. Chú ý trong trường hợp này, M nghĩa là Megabyte.

Về cách tạo và quản lý tablespace, hãy tham khảo bài viết:
http://how.vndemy.com/databases/223-huong-dan-quan-ly-tablespace-trong-oracle/

Cấp quyền cho User

Để cho user có thể đăng nhập tạo session và thực hiện các quyền cơ bản như: tạo Bảng, trigger, sequence.

-- Login and create session permission
grant create session to demo;

-- Basic permission
grant create table to demo;
grant create trigger to demo;
grant create sequence to demo;
GRANT CREATE VIEW TO demo;

Hoặc cấp quyền cho user với vai trò là một DBA

-- Admin/DBA permission
grant all PRIVILEGES on demo to demo;
-- OR
GRANT dba, connect to demo;

Tham khảo:
http://www.oracle-dba-online.com/sql/grant_and_revoke_privileges.htm

About The Author

  • Chào anh Nhữ Bảo Vũ!!!
    Hiện em cũng đang tìm hiểu về oracle và đang gặp khó khăn ở việc phân quyền cho user, mong anh có thể hướng dẫn giúp em.
    Bước 1: em sử dụng account: system để tạo tablespace: ad_QLKDNH, ad_tem_QLKDNH (quản lý kinh doanh nhà hàng);
    Bước 2: tạo 1 user có tên: adminis, pass: adminis. Sau đó, gán các quyền như: create session, create table, create trigger, create view, create procedure, create sequence, create user – WITH ADMIN OPTION.
    Bước 3: Thoát system, đăng nhập vào adminis để tạo table, sequence, trigger, procedure, function, view. (thành công)
    Bước 4: Tạo các ROLE theo nghiệp vụ của nhà hàng (để quản lý truy vấn các table liên quan đến từng nghiệp vụ) gán quyền select, insert, update, delete tới các role.
    Bước 5 tạo user (create sesion) và gán quyền vào ROLE (thành công), user này sử dụng tablespace và temporary của adminis
    Bước 6: đăng nhập vào user vừa được tạo để truy vấn đến các đối tượng trong schema “adminis” nhưng ở bước 6 này thì không thể truy vấn các table vì tabel không tồn tại.
    Em sử dụng Oracle SQL Developer.
    Đó là các bước mà em thực hiện nhưng không hiểu sao bước 6 không thực hiện đươc mong anh có thể giúp đỡ!

    • Chào bạn Phan Bảo !

      Mặc định khi bạn tạo user thì Oracle cũng tạo cho bạn 1 schema giống với tên user và chưa quản lý Object nào cả. Khả năng là tại bước 5 bạn chưa gán các quyền thao tác trên các đối tượng thuộc schema adminis.

      Bạn hãy thử gán quyền (*) cho user mà bạn tạo ở bước 5 vào 1 bảng (hoặc object nào đó) đã có trên schema adminis, theo cú pháp sau :

      GRANT privileges ON object TO user;

      Ví dụ: grant all on adminis.table1 to user5;

      Bạn thử xem có ok không nhé! 😀

  • Nếu mình
    Grant select on table1 to user01;
    Rồi đăng nhập vào user01 truy vấn
    Select * From “adminis”.table1;
    thì truy vấn được.

    Nếu mình vào adminis
    revoke select from user01;
    Create role role1;
    Grant select on table1 to user01;
    Rồi đăng nhập vào user01
    select * from table1;
    thì báo lỗi table không tồn tại.

    Như vậy đó anh!!!!

  • Viết nhằm r.
    Create role role1;
    Grant select on table1 to role1;

    Rồi

    Grant role1 to user01;
    sau đó mơi truy vấn table1.

  • Lê Thị Diệu Ly

    Cám ơn anh về bài viết. ^^

  • Cảm ơn bạn, đúng cái mình cần 🙂