MySql-許可權管理

來源:互聯網
上載者:User

標籤:

在mysql資料庫中,有mysql_install_db指令碼初始化許可權表,儲存許可權的表有:

  1. user表
  2. db表
  3. host表
  4. table_priv表
  5. columns_priv表
  6. proc_priv表

MySQL存取控制包含2個階段:
階段1:伺服器檢查你是否允許串連。

階段2:假定你能串連,伺服器檢查你發出的每個請求。看你是否有足夠的許可權實施它。例如,如果你從資料庫中一個表精選(select)行或從資料庫拋棄一個表,伺服器確定你對錶有select許可權或對資料庫有drop許可權。

伺服器在存取控制的兩個階段使用在mysql的資料庫中的user、db和host表表示,
表名稱 user db host
範圍欄位 Host Host Host
User Db Db
Password User

表名稱 user db host
範圍欄位 host,use,password host,db,user host,db

許可權的鍵以 _priv 結尾:

使用GRANT語句建立新使用者
GRANT USER語句可以用來建立帳戶,通過該語句可以在user表中添加一條新記錄
比起CREATE USER語句建立的新使用者,還需要使用GRANT語句

賦予使用者權限
使用GRANT語句建立新使用者時必須有GRANT許可權。
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] …
ON [object_type] {tbl_name | * | . | db_name.*}
TO user [IDENTIFIED BY [PASSWORD] ‘password’]
[, user [IDENTIFIED BY [PASSWORD] ‘password’]] …
[REQUIRE
NONE |
[{SSL| X509}]
[CIPHER ‘cipher’ [AND]]
[ISSUER ‘issuer’ [AND]]
[SUBJECT ‘subject’]]
[WITH with_option [with_option] …]

使用GRANT語句建立一個新使用者testUser,密碼為testpwd,並授予使用者對所有資料表的SELECT和UPDATE許可權

GRANT SELECT ,UPDATE ON *.* TO ‘testUser‘@‘localhost‘ identified BY ‘testpwd‘SELECT `Host` ,`User` ,`Select_priv` ,`Update_priv`  FROM mysql.user WHERE `User` =‘testUser‘;

執行結果顯示執行成功,使用SELECT語句查詢使用者testUser的許可權
Select ‘Host’,’User’,’Select_priv’,’Update_priv’ from mysql user where ‘User’ = ‘testUser’;

root使用者密碼丟失的解決辦法
使用–skip-grant-tables選項啟動MYSQL服務
使用–skip-grant-tables選項啟動MYSQL時,伺服器將不載入許可權判斷,任何使用者都能訪問資料庫

LINUX下
使用mysqld_safe來啟動MYSQL服務,也可以使用/etc/init.d/mysql命令來啟動mysql

mysqld_safe --skip-grant-tables user=mysql

或者

/etc/init.d/mysql start-mysqld --skip-grant-tables

啟動MYSQL服務後,就可以使用root使用者登入了

許可權管理
MYSQL中的各種許可權
對於GRANT和REVOKE語句,priv_type可以被指定為以下任何一種:

許可權 意義
ALL [PRIVILEGES] 設定除GRANT OPTION之外的所有簡單許可權
ALTER 允許使用ALTER TABLE
ALTER ROUTINE 更改或取消已儲存的子程式
CREATE 允許使用CREATE TABLE
CREATE ROUTINE 建立已儲存的子程式
CREATE TEMPORARY TABLES 允許使用CREATE TEMPORARY TABLE
CREATE USER 允許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW 允許使用CREATE VIEW
DELETE 允許使用DELETE
DROP 允許使用DROP TABLE
EXECUTE 允許使用者運行已儲存的子程式
FILE 允許使用SELECT…INTO OUTFILE和LOAD DATA INFILE
INDEX 允許使用CREATE INDEX和DROP INDEX
INSERT 允許使用INSERT
LOCK TABLES 允許對您擁有SELECT許可權的表使用LOCK TABLES
PROCESS 允許使用SHOW FULL PROCESSLIST
REFERENCES 未被實施
RELOAD 允許使用FLUSH
REPLICATION CLIENT 允許使用者詢問從屬伺服器或主伺服器的地址
REPLICATION SLAVE 用於複製型從屬伺服器(從主伺服器中讀取二進位日誌事件)
SELECT 允許使用SELECT
SHOW DATABASES SHOW DATABASES 顯示所有資料庫
SHOW VIEW 允許使用SHOW CREATE VIEW
SHUTDOWN 允許使用mysqladmin shutdown
SUPER 允許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL語句,mysqladmin debug命令;允許您串連(一次),即使已達到max_connections。
UPDATE 允許使用UPDATE
USAGE “無許可權”的同義字
GRANT OPTION 允許授予許可權

當從舊版本的MySQL升級時,要使用EXECUTE, CREATE VIEW, SHOW VIEW, CREATE USER, CREATE ROUTINE和ALTER ROUTINE許可權

授權
授權就是為某個使用者授予許可權
授與權限可以分為多個層級:
全域層級
全域許可權適用於一個給定伺服器中的所有資料庫。這些許可權儲存在mysql.user表中。GRANT ALL ON .和REVOKE ALL ON .只授予和撤銷全域許可權。
資料庫層級
資料庫許可權適用於一個給定資料庫中的所有目標。這些許可權儲存在mysql.db和mysql.host表中。GRANT ALL ONdb_name.和REVOKE ALL ON db_name.只授予和撤銷資料庫許可權。
表層級
表許可權適用於一個給定表中的所有列。這些許可權儲存在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表許可權。
列層級
列許可權適用於一個給定表中的單一列。這些許可權儲存在mysql.columns_priv表中。當使用REVOKE時,您必須指定與被授權列相同的列。
子程式層級
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT許可權適用於已儲存的子程式。這些許可權可以被授予為全域層級和資料庫層級。而且,除了CREATE ROUTINE外,這些許可權可以被授予為子程式層級,並儲存在mysql.procs_priv表中。

當後續目標是一個表、一個已儲存的函數或一個已儲存的過程時,object_type子句應被指定為TABLE、FUNCTION或PROCEDURE。當從舊版本的MySQL升級時,要使用本子句,您必須升級您的授權表

收回許可權
收回許可權就是取消已經賦予使用者的某些許可權。收回使用者不必要的許可權可以在一定程度上保證系統的安全性。
使用REVOKE收回許可權之後,使用者帳戶的記錄將從db、host、tables_priv、columns_priv表中刪除,但是使用者帳號記錄依然
在user表中儲存。

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...    ON [object_type] {tbl_name | * | *.* | db_name.*}    FROM user [, user] ... REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

使用REVOKE語句,必須擁有mysql資料庫的全域CREATE許可權或UPDATE許可權
使用REVOKE語句取消使用者grantUser的INSERT許可權

REVOKE INSERT ON *.* FROM ‘grantUser‘@‘localhost‘;

注意:當從舊版本的MYSQL升級時,如果要使用EXECUTE、CREATE VIEW、SHOW VIEW、CREATE USER、CREATE ROUTINE、ALTER ROUTINE許可權,必須先升級授權表

查看許可權
SHOW GRANT語句可以顯示使用者的許可權資訊

show grants FOR ‘user‘@‘host‘;

MySql-許可權管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.