我想授予 SQL 資料庫中特定表的選擇權限。我知道如何授予資料庫中所有表的權限:
GRANT SELECT ON `web01\_database\_home`.* TO `user-1_ert`@`%` ;
資料庫web01\_database\_home有一個名為 的表test_table_1,因此我嘗試將 替換*為該表名:
GRANT SELECT ON `web01\_database\_home`.test_table_1 TO `user-1_ert`@`%` ;
GRANT SELECT ON `web01\_database\_home.test_table_1` TO `user-1_ert`@`%` ;
這些都不起作用。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
啊,我看到它說 MariaDB - 我剛剛查了一下,發現有一本手冊(GRANT 部分:https ://mariadb.com/kb/en/grant/#grant-option )包含這一行,關于給予對表的特定列的權限:
GRANT SELECT (name, position) on Employee to 'jeffrey'@'localhost';
奇怪的是,它似乎沒有指定如何對一個完整的表執行此操作,但也許將 (name, permission) 替換為 * 可能會這樣做?
只是隨地吐痰,但祝你好運
uj5u.com熱心網友回復:
你應該使用:
grant select on `web01\_database\_home`.`test_table_1` to 'user-1_ert'@'%';
使用以下命令檢查用戶是否
select user,host from mysql.user;
檢查表是否也存在
use `web01\_database\_home` ;
show tables like '%test_table_1%'
檢查https://dev.mysql.com/doc/refman/8.0/en/grant.html
在 MariaDB 5.5.68 上測驗
MariaDB [(none)]> select version();
----------------
| version() |
----------------
| 5.5.68-MariaDB |
----------------
1 row in set (0.00 sec)
MariaDB [(none)]> create database `web01\_database\_home` ;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user 'user-1_ert'@'%' identified by 'Some password';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> use `web01\_database\_home`;
Database changed
MariaDB [web01\_database\_home]> create table `test_table_1` (id int);
Query OK, 0 rows affected (0.00 sec)
MariaDB [web01\_database\_home]> show tables;
---------------------------------
| Tables_in_web01\_database\_home |
---------------------------------
| test_table_1 |
---------------------------------
1 row in set (0.00 sec)
MariaDB [web01\_database\_home]> use mysql;
Database changed
MariaDB [mysql]> grant select on `web01\_database\_home`.`test_table_1` to 'user-1_ert'@'%';
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> show grants for 'user-1_ert'@'%';
-----------------------------------------------------------------------------------------------------------
| Grants for user-1_ert@% |
-----------------------------------------------------------------------------------------------------------
| GRANT USAGE ON *.* TO 'user-1_ert'@'%' IDENTIFIED BY PASSWORD '*53D389B032BD7688B15F9B0FCA6AAAD803534255' |
| GRANT SELECT ON `web01\_database\_home`.`test_table_1` TO 'user-1_ert'@'%' |
-----------------------------------------------------------------------------------------------------------
2 rows in set (0.00 sec)
注意 檢查您是否對正在使用的用戶具有 GRANT OPTION 權限。
MariaDB [mysql]> select current_user; ---------------- | current_user | ---------------- | root@localhost | ---------------- 1 row in set (0.00 sec) MariaDB [mysql]> show grants for root@localhost; --------------------------------------------------------------------- | Grants for root@localhost | --------------------------------------------------------------------- | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | --------------------------------------------------------------------- 2 rows in set (0.00 sec)
uj5u.com熱心網友回復:
我相信如果您添加 OBJECT:: 它可能對您有用:
GRANT SELECT ON OBJECT::test_table_1 TO user-1_ert;
來源:https ://docs.microsoft.com/en-us/sql/t-sql/statements/grant-object-permissions-transact-sql?view=sql-server-ver16
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/493848.html
