Làm cách nào để tôi tự động cấp tất cả các đặc quyền cho một lược đồ được tạo bởi người dùng trong mysql?


7

Một người mới gia nhập công ty và tôi đã tạo một tài khoản cho cô ấy trong mysql bằng cách sử dụng như sau:

CREATE USER 'username' IDENTIFIED BY 'password'

Cô ấy cần tạo lược đồ của riêng mình và sử dụng:

GRANT CREATE ON *.* TO username;

Vấn đề là bây giờ cô ấy có thể tạo các lược đồ và bảng mới nhưng cô ấy không thể làm gì với nó. Tôi muốn cô ấy không có quyền truy cập vào các lược đồ / bảng hiện có nhưng có thể tạo db của riêng mình và làm bất cứ điều gì với nó. Điều này có thể không?

Câu trả lời:


6

Cấp tất cả quyền riêng tư trên cơ sở dữ liệu mydbchousername

GRANT ALL PRIVILEGES ON mydb.* TO username;

Cấp quyền riêng tư trên bàn mydb.mytablechousername

GRANT ALL PRIVILEGES ON mydb.mytable TO username;

Tôi khuyên bạn nên bỏ người dùng trước để xóa bất kỳ đặc quyền nào trên toàn máy chủ.

DROP USER username;
CREATE USER username;
GRANT ALL PRIVILEGES ON mydb.* TO username;

Tại sao bỏ người dùng trước? Khi bạn lần đầu tiên tạo một người dùng được gọi usernamevà đăng nhập, tên người dùng không có quyền riêng tư. Chỉ cần chạy SHOW GRANTS;để xem nó. Nó nên nói một cái gì đó như GRANT USAGE ON *.* TO username. Tại thời điểm đó, usernamechỉ có thể đăng nhập. Đó là cơ hội của bạn để tạo ra các đặc quyền.

Nếu bạn chạy

GRANT ALL PRIVILEGES ON *.* TO username;

Tên người dùng sẽ có đặc quyền cơ sở dữ liệu toàn cầu (tất cả các cơ sở dữ liệu)

Nếu bạn chạy

GRANT ALL PRIVILEGES ON mydb.* TO username;

Tên người dùng sẽ chỉ có đặc quyền trên toàn mydbcơ sở dữ liệu.

Nếu bạn chạy

GRANT ALL PRIVILEGES ON mydb.mytable TO username;

Tên người dùng sẽ chỉ có đặc quyền bảng trên mydb.mytable.

Bạn không thể trộn chúng. Nếu bạn vô tình trượt usernameđặc quyền usernamekhông nên có.

Nếu bạn muốn xem những đặc quyền nào tồn tại ở ba cấp độ, hãy chạy các truy vấn sau

SELECT table_name,column_name
FROM information_schema.columns
WHERE table_schema='mysql'
AND table_name IN ('user','db','tables_priv')
AND column_name LIKE '%\_priv'
ORDER BY table_name,column_name;

Dưới đây là thông tin cá nhân cho MySQL 5.5

mysql> SELECT table_name,column_name
    -> FROM information_schema.columns
    -> WHERE table_schema='mysql'
    -> AND table_name IN ('user','db','tables_priv')
    -> AND column_name LIKE '%\_priv'
    -> ORDER BY table_name,column_name;
+-------------+------------------------+
| table_name  | column_name            |
+-------------+------------------------+
| db          | Alter_priv             |
| db          | Alter_routine_priv     |
| db          | Create_priv            |
| db          | Create_routine_priv    |
| db          | Create_tmp_table_priv  |
| db          | Create_view_priv       |
| db          | Delete_priv            |
| db          | Drop_priv              |
| db          | Event_priv             |
| db          | Execute_priv           |
| db          | Grant_priv             |
| db          | Index_priv             |
| db          | Insert_priv            |
| db          | Lock_tables_priv       |
| db          | References_priv        |
| db          | Select_priv            |
| db          | Show_view_priv         |
| db          | Trigger_priv           |
| db          | Update_priv            |
| tables_priv | Column_priv            |
| tables_priv | Table_priv             |
| user        | Alter_priv             |
| user        | Alter_routine_priv     |
| user        | Create_priv            |
| user        | Create_routine_priv    |
| user        | Create_tablespace_priv |
| user        | Create_tmp_table_priv  |
| user        | Create_user_priv       |
| user        | Create_view_priv       |
| user        | Delete_priv            |
| user        | Drop_priv              |
| user        | Event_priv             |
| user        | Execute_priv           |
| user        | File_priv              |
| user        | Grant_priv             |
| user        | Index_priv             |
| user        | Insert_priv            |
| user        | Lock_tables_priv       |
| user        | Process_priv           |
| user        | References_priv        |
| user        | Reload_priv            |
| user        | Repl_client_priv       |
| user        | Repl_slave_priv        |
| user        | Select_priv            |
| user        | Show_db_priv           |
| user        | Show_view_priv         |
| user        | Shutdown_priv          |
| user        | Super_priv             |
| user        | Trigger_priv           |
| user        | Update_priv            |
+-------------+------------------------+
50 rows in set (0.01 sec)

mysql>

Chạy truy vấn để xem các đặc quyền cho 5.1 và 5.0


Cảm ơn, vấn đề là khi người dùng A tạo một lược đồ / bảng mới, anh ta không có đặc quyền nào trên các thực thể mà anh ta vừa tạo. Tôi muốn anh ấy hoặc cô ấy có tất cả các đặc quyền thay vì không có sự can thiệp từ người dùng root (tôi). Điều này có thể không?
Marsellus Wallace

vì vậy bạn có một người dùng có quyền trong lược đồ a. nhưng là tạo các đối tượng trong lược đồ b? Hay người dùng của bạn chỉ có quyền đối với một nhóm đối tượng cụ thể?
sần

Tôi muốn một người dùng có thể tạo các lược đồ. Khi người dùng tạo một lược đồ tôi muốn anh ta hoặc cô ta tự động có tất cả các đặc quyền trên lược đồ đó. Bằng cách này, tôi có thể cho phép người dùng mới chơi xung quanh và khá tự chủ mà không mạo hiểm thỏa hiệp dữ liệu hiện có
Marsellus Wallace

1
Những gì bạn đang hỏi là giao thức chuẩn cho Oracle bởi vì khi bạn tạo người dùng trong Oracle, một lược đồ được tạo tự động trong không gian bảng mặc định hoặc không gian bảng bạn chọn. MySQL không theo mô hình đó. Trong MySQL, người dùng có tất cả các đặc quyền phải chịu trách nhiệm cho việc tạo người dùng và các bài tập xác thực tiếp theo.
RolandoMySQLDBA

Người dùng mysql có thể sử dụng các lệnh GRANT để gán các đặc quyền cho những người dùng MySQL khác, nhưng chỉ có thể gán nhiều đặc quyền như người dùng sở hữu.
RolandoMySQLDBA

1
CREATE TABLESPACE dwtblspc LOGGING DATAFILE 'D:\oraclexe\app\oracle\oradata\XE\DWTBLSPC.DBF' SIZE 300M AUTOEXTEND ON NEXT 1048K MAXSIZE UNLIMITED;

CREATE USER prateek IDENTIFIED  by prateek DEFAULT TABLESPACE dwtblspc ACCOUNT UNLOCK;

GRANT unlimited tablespace to prateek ;

CREATE ROLE prateek_role;

GRANT CREATE SESSION,ALTER SESSION,CREATE TABLE,CREATE CLUSTER,CREATE SYNONYM,CREATE VIEW,CREATE SEQUENCE,
CREATE DATABASE LINK,CREATE PROCEDURE,CREATE TRIGGER,CREATE TYPE,CREATE OPERATOR,CREATE INDEXTYPE,BACKUP ANY TABLE,
SELECT ANY TABLE,CREATE ANY TABLE,CREATE ANY INDEX,ALTER ANY INDEX,ALTER ANY INDEXTYPE,DROP ANY INDEX,DROP ANY INDEXTYPE to prateek_role;

GRANT prateek_role to prateek ;

Hy vọng nó sẽ giúp. Hy vọng nó sẽ giúp.


1
Bài đăng của OP đã được gắn thẻ rõ ràng với MySQL - vì vậy câu trả lời của bạn không hữu ích lắm ;-).
Vérace

nếu bạn rõ ràng về mặt khái niệm thì bất cứ điều gì sự kiên trì không thành vấn đề vì vậy tôi nghĩ rằng nó có thể đưa ra một hướng dẫn rõ ràng cho bất kỳ ai khác ngoài cú pháp.
Sai prateek

Câu trả lời này không giúp ích gì vì 1) không có vai trò nào trong MySQL, 2) nhiều khoản trợ cấp bạn có trong câu trả lời của bạn không tồn tại trong các bảng cấp mys mys, 3) không có loại nào trong MySQL, 4) không có trình tự nào trong MySQL , 5) không có liên kết cơ sở dữ liệu, 6) không có toán tử, 7) không cụm, 8) không từ đồng nghĩa, 9) không có trợ cấp dự phòng, 10) Có GRANT riêng cho 4 cấp độ truy cập. Chúng không được hợp nhất trong MySQL vì bạn đang hiển thị từ SQL Server, 11) Các khoản tài trợ không phụ thuộc vào không gian bảng, 12) không có khái niệm về BẤT
K T

@Rolando Tôi không nghĩ đây là SQL Server cụ thể, nó là đặc thù của Oracle. Không thay đổi bất cứ điều gì, chỉ cần làm rõ. :-) Dù sao, đó là một nỗ lực để trả lời, nó chỉ sai.
Aaron Bertrand

@AaronBertrand OMG bạn nói đúng, đó là Oracle. đó là trên con đường.
RolandoMySQLDBA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.