MySQL權限

1、MySQL權限簡介mysql

    關於mysql的權限簡單的理解就是mysql容許你作你全力之內的事情,不能夠越界。好比只容許你執行select操做,那麼你就不能執行update操做。只容許你從某臺機器上鍊接mysql,那麼你就不能從除那臺機器之外的其餘機器鏈接mysql。sql

    那麼Mysql的權限是如何實現的呢?這就要說到mysql的兩階段驗證,下面詳細介紹:第一階段:服務器首先會檢查你是否容許鏈接。由於建立用戶的時候會加上主機限制,能夠限制成本地、某個IP、某個IP段、以及任何地方等,只容許你從配置的指定地方登錄。第二階段:若是你能鏈接,Mysql會檢查你發出的每一個請求,看你是否有足夠的權限實施它。好比你要更新某個表、或者查詢某個表,Mysql會查看你對哪一個表或者某個列是否有權限。再好比,你要運行某個存儲過程,Mysql會檢查你對存儲過程是否有執行權限等。數據庫

    MYSQL到底都有哪些權限呢?從官網複製一個表來看看:安全

權限服務器

權限級別app

權限說明socket

CREATEide

數據庫、表或索引ui

建立數據庫、表或索引權限this

DROP

數據庫或表

刪除數據庫或表權限

GRANT OPTION

數據庫、表或保存的程序

賦予權限選項

REFERENCES

數據庫或表

 

ALTER

更改表,好比添加字段、索引等

DELETE

刪除數據權限

INDEX

索引權限

INSERT

插入權限

SELECT

查詢權限

UPDATE

更新權限

CREATE VIEW

視圖

建立視圖權限

SHOW VIEW

視圖

查看視圖權限

ALTER ROUTINE

存儲過程

更改存儲過程權限

CREATE ROUTINE

存儲過程

建立存儲過程權限

EXECUTE

存儲過程

執行存儲過程權限

FILE

服務器主機上的文件訪問

文件訪問權限

CREATE TEMPORARY TABLES

服務器管理

建立臨時表權限

LOCK TABLES

服務器管理

鎖表權限

CREATE USER

服務器管理

建立用戶權限

PROCESS

服務器管理

查看進程權限

RELOAD

 

 

服務器管理

執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權限

REPLICATION CLIENT

服務器管理

複製權限

REPLICATION SLAVE

服務器管理

複製權限

SHOW DATABASES

服務器管理

查看數據庫權限

SHUTDOWN

服務器管理

關閉數據庫權限

SUPER

服務器管理

執行kill線程權限

 

    MYSQL的權限如何分佈,就是針對表能夠設置什麼權限,針對列能夠設置什麼權限等等,這個能夠從官方文檔中的一個表來講明:

權限分佈

可能的設置的權限

表權限

'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

列權限

'Select', 'Insert', 'Update', 'References'

過程權限

'Execute', 'Alter Routine', 'Grant'

 2、MySQL權限經驗原則:

    權限控制主要是出於安全因素,所以須要遵循一下幾個經驗原則:

    一、只授予能知足須要的最小權限,防止用戶幹壞事。好比用戶只是須要查詢,那就只給select權限就能夠了,不要給用戶賦予update、insert或者delete權限。

    二、建立用戶的時候限制用戶的登陸主機,通常是限制成指定IP或者內網IP段。

    三、初始化數據庫的時候刪除沒有密碼的用戶。安裝完數據庫的時候會自動建立一些用戶,這些用戶默認沒有密碼。

    四、爲每一個用戶設置知足密碼複雜度的密碼。

    五、按期清理不須要的用戶。回收權限或者刪除用戶。

3、MySQL權限實戰:

    一、GRANT命令使用說明:

    先來看一個例子,建立一個只容許從本地登陸的超級用戶jack,並容許將權限賦予別的用戶,密碼爲:jack.

mysql> grant all privileges on *.* to jack@'localhost' identified by "jack" with grant option; Query OK, 0 rows affected (0.01 sec)

    GRANT命令說明:
    ALL PRIVILEGES 是表示全部權限,你也可使用select、update等權限。

    ON 用來指定權限針對哪些庫和表。

    *.* 中前面的*號用來指定數據庫名,後面的*號用來指定表名。

    TO 表示將權限賦予某個用戶。

    jack@'localhost' 表示jack用戶,@後面接限制的主機,能夠是IP、IP段、域名以及%,%表示任何地方。注意:這裏%有的版本不包括本地,之前碰到過給某個用戶設置了%容許任何地方登陸,可是在本地登陸不了,這個和版本有關係,遇到這個問題再加一個localhost的用戶就能夠了。

    IDENTIFIED BY 指定用戶的登陸密碼。

    WITH GRANT OPTION 這個選項表示該用戶能夠將本身擁有的權限受權給別人。注意:常常有人在建立操做用戶的時候不指定WITH GRANT OPTION選項致使後來該用戶不能使用GRANT命令建立用戶或者給其它用戶受權。

備註:可使用GRANT重複給用戶添加權限,權限疊加,好比你先給用戶添加一個select權限,而後又給用戶添加一個insert權限,那麼該用戶就同時擁有了select和insert權限。

    二、刷新權限

    使用這個命令使權限生效,尤爲是你對那些權限表user、db、host等作了update或者delete更新的時候。之前遇到過使用grant後權限沒有更新的狀況,只要對權限作了更改就使用FLUSH PRIVILEGES命令來刷新權限。

mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)

    三、查看權限

複製代碼
查看當前用戶的權限:
mysql> show grants; +---------------------------------------------------------------------+ | 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) 查看某個用戶的權限: mysql> show grants for 'jack'@'%'; +-----------------------------------------------------------------------------------------------------+ | Grants for jack@% | +-----------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'jack'@'%' IDENTIFIED BY PASSWORD '*9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0' | +-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
複製代碼

    四、回收權限

mysql> revoke delete on *.* from 'jack'@'localhost'; Query OK, 0 rows affected (0.01 sec)

    五、刪除用戶

複製代碼
mysql> select host,user,password from user; +-----------+------+-------------------------------------------+ | host | user | password | +-----------+------+-------------------------------------------+ | localhost | root | | | rhel5.4 | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | | rhel5.4 | | | | localhost | jack | *9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0 | +-----------+------+-------------------------------------------+ 7 rows in set (0.00 sec) mysql> drop user 'jack'@'localhost'; Query OK, 0 rows affected (0.01 sec)
複製代碼

    六、對帳戶重命名

mysql> rename user 'jack'@'%' to 'jim'@'%'; Query OK, 0 rows affected (0.00 sec)

    七、修改密碼

複製代碼
  1、用set password命令 mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456'); Query OK, 0 rows affected (0.00 sec) 2、用mysqladmin [root@rhel5 ~]# mysqladmin -uroot -p123456 password 1234abcd 備註: 格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼 3、用update直接編輯user表 mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update user set PASSWORD = PASSWORD('1234abcd') where user = 'root'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 4、在丟失root密碼的時候: [root@rhel5 ~]# mysqld_safe --skip-grant-tables & [1] 15953 [root@rhel5 ~]# 130911 09:35:33 mysqld_safe Logging to '/mysql/mysql5.5/data/rhel5.4.err'. 130911 09:35:33 mysqld_safe Starting mysqld daemon with databases from /mysql/mysql5.5/data [root@rhel5 ~]# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.22 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> \s -------------- mysql Ver 14.14 Distrib 5.5.22, for Linux (i686) using EditLine wrapper Connection id: 2 Current database: Current user: root@ SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.22 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /tmp/mysql.sock Uptime: 36 sec Threads: 1 Questions: 5 Slow queries: 0 Opens: 23 Flush tables: 1 Open tables: 18 Queries per second avg: 0.138 --------------  mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update user set password = PASSWORD('123456') where user = 'root'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
複製代碼
相關文章
相關標籤/搜索