mysql用戶權限管理

權限管理:

用戶:
系統層面:用戶就是一個用戶名===>用戶名:密碼
能做什麼?
1、登錄系統
2、管理系統對象
MySQL:
不再是單純的用戶名和密碼
用戶名@'主機範圍' 主機範圍被稱之爲白名單
主機範圍:

本地連接:
localhost
**

遠程連接:**
10.0.0.200
oldboy.com
10.0.0.% 網段
10.0.0.5%
% XXXX 不建議用


開發申請用戶時,提供給管理:

app@'10.0.0.%' 密碼: xxxx

權限: ALL privileges
SELECT, INSERT, UPDATE, DELETE, CREATE, RELOAD,
SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER,
SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, DROP
LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT,
CREATE VIEW, SHOW VIEW, CREATE ROUTINE,
ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

開發人員可能會用到的權限:
create update insert select CREATE VIEW CREATE ROUTINE SHOW VIEW
CREATE TEMPORARY TABLES ALTER

grant 權限 on 權限作用範圍 to 用戶 identified by '密碼'

.
py.
py.t1
grant create,update,insert,select ,CREATE VIEW on py.
to py@'192.168.12.%' identified by '123';

select user,host,password from mysql.user;

開發人員申請用戶流程:
1、IP段
2、用戶名、密碼要求
3、需要哪些權限

MySQL中創建一個數據庫時通常是要設置字符集的,一般情況下我們會設定爲UTF-8,但是通常還會出現一個數據庫校對規則,
有好多可選擇的。可選擇utf8_general_ci

這裏給出示範操作:
在創建mysql數據庫的時候如何支持UTF-8編碼

1、用工具
CHARSET字符集:選擇 utf8
COLLATION數據庫校驗規則:選擇 utf8_general_ci

2、用SQL語句
GBK: CREATE DATABASE test1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF-8: CREATE DATABASE test2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


創建了一個utf8的mydb的數據庫:

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci;

指定部分權限給用戶:
增加一個test1用戶,密碼爲123456,可以在任何主機上登錄,並對所有數據庫有查詢,增加,修改和刪除的功能:
grant select,insert,update,delete on mydb.* to test1@'%' identified by '123456';
FLUSH PRIVILEGES;#刷新系統權限表

授權test1所有權限:
GRANT ALL ON mydb.* TO username@localhost IDENTIFIED BY password';

查看創建用戶的密碼:【mysql所有的用戶都存儲在mysql.user這個表中】
mysql> select user,host,password from mysql.user;
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

查看數據庫的表有哪些字段可以查詢:authentication_string
help show;
創建
SHOW CREATE TABLE tbl_name;
select * from mysql.user ;

報錯原因解決:
mysql5.7以後mysql.user表中沒有了password字段,而是使用authentication_string來代替。
select user,host,authentication_string from mysql.user;
等同於
use mysql;
select user,host,authentication_string from user;

update mysql.user setauthentication_string=password(“新密碼”) where User=”test” and Host=”localhost”;
flush privileges;

設置mysql的root密碼:
輸入update mysql.user set authentication_string=password('密碼')where user='賬戶';假設密碼是123。
最後輸入flush privileges;按回車,告訴mysql刷新一下系統權限,此時修改的密碼纔會生效。

update mysql.user set authentication_string=password(123456) where User="root" and Host="localhost";


mysql 跳過密碼驗證:

最好以管理員身份運行cmd,進入bin目錄下,然後停止服務器,輸入net stop mysql,
再輸入 mysqld --skip-grant-tables (回車,啓動mysql,意思是告訴mysql不需要登錄驗證)。
然後關掉cmd,再重新打開。
輸入mysql -uroot -p 連續按兩次回車按鈕會直接進入mysql的控制檯界面,此時發現登錄 root 賬號是不需要密碼的。

刪除mysql.user表中的用戶:
Delete FROM mysql.user Where User="用戶名" and Host=”localhost”;
flush privileges;

https://blog.csdn.net/jaryle/article/details/76855370

小節:
一、創建數據庫:

  1、 CREATE DATABASE 數據庫名;

  2、 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 數據庫名.* TO 數據庫名@localhost IDENTIFIED BY '密碼';

  3、 SET PASSWORD FOR

  '數據庫名'@'localhost' = OLD_PASSWORD('密碼');

  依次執行3個命令完成數據庫創建。注意:中文 “密碼”和“數據庫”是戶自己需要設置的。


二、修改密碼:

mysql -u root -p
update mysql.user setauthentication_string=password(“新密碼”) where User=”test” and Host=”localhost”;
flush privileges;
mysql5.7以後mysql.user表中沒有了password字段,而是使用authentication_string來代替。

三、刪除用戶:
mysql -u root -p
Delete FROM mysql.user Where User="用戶名" and Host=”localhost”;
flush privileges;

創建用戶
命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
刪除賬戶及權限:
drop user 用戶名@’%’;
drop user 用戶名@ localhost;

注意:
創建一個只允許從本地登錄的超級用戶yan,並允許將權限賦予別的用戶,密碼爲111
GRANT ALL PRIVILEGES ON . TO yan@'localhost' IDENTIFIED BY '111' WITH GRANT OPTION;
GRANT命令說明:
ALL PRIVILEGES 是表示所有權限,你也可以使用select、update等權限提到的權限。
ON 用來指定權限針對哪些庫和表。
. 中前面的號用來指定數據庫名,後面的號用來指定表名
TO 表示將權限賦予某個用戶。
test@'%' 表示feihong用戶,@後面接限制的主機,可以是IP、IP段、域名以及%,localhost表示本地
%表示任何地方。注意:這裏%有的版本不包括本地,以前碰到過給某個用戶設置了%允許任何地方登錄,但是在本地登錄不了,這個和版本有關係,遇到這個問題再加一個localhost的用戶就可以了。

WITH GRANT OPTION 這個選項表示該用戶可以將自己擁有的權限授權給別人。
注意:經常有人在創建操作用戶的時候不指定WITH GRANT OPTION選項
導致後來該用戶不能使用GRANT命令創建用戶或者給其他用戶授權。

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

四、爲用戶授權:
設置權限時必須給出一下信息
1,要授予的權限
2,被授予訪問權限的數據庫或表
3,用戶名
grant和revoke可以在幾個層次上控制訪問權限
1,整個服務器,使用 grant ALL 和revoke ALL
2,整個數據庫,使用on database.*
3,特點表,使用on database.table
4,特定的列
5,特定的存儲過程

user表中host列的值的意義
% 匹配所有主機
localhost localhost不會被解析成IP地址,直接通過UNIXsocket連接
127.0.0.1 會通過TCP/IP協議連接,並且只能在本機訪問;
::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1

授權格式:grant 權限 on 數據庫. to 用戶名@登錄主機 identified by “密碼”;
eg: grant all privileges on
.* to 'root'@'192.168.218.128' identified by 'hello' with grant option;
flush privileges; //要刷新權限

授權test用戶擁有testDB數據庫的所有權限:
grant all privileges on testDB.* to “test”@”localhost” identified by “1234”;
flush privileges; #刷新系統權限表

指定部分權限給用戶:
grant select,update on testDB.* to “test”@”localhost” identified by “1234”;
flush privileges; #刷新系統權限表

for example:
創建一個網站用戶(程序用戶)
創建一個一般的程序用戶,這個用戶可能只需要SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES等權限如果有存儲過程還需要加上EXECUTE權限,一般是指定內網網段192.168.100網段。
GRANT USAGE,SELECT, INSERT, UPDATE, DELETE, SHOW VIEW ,CREATE TEMPORARY TABLES,EXECUTE ON test.* TO webuser@'192.168.100.%' IDENTIFIED BY '[email protected]';

創建一個普通用戶(僅有查詢權限)
GRANT USAGE,SELECT ON test.* TO public@'192.168.100.%' IDENTIFIED BY '[email protected]';

五、查看用戶的權限:
SHOW GRANTS FOR 'test1'@'%';
SHOW GRANTS FOR 'root'@'localhost';
SHOW GRANTS FOR 'webuser'@'192.168.100.%';

六、回收權限:
REVOKE DELETE ON mydb.* FROM 'test1'@'%';

七、刪除用戶:
注意刪除用戶不要使用DELETE直接刪除,因爲使用DELETE刪除後用戶的權限並未刪除,新建同名用戶後又會繼承以前的權限。正確的做法是使用DROP USER命令刪除用戶,比如要刪除'webuser'@'192.168.100.%'用戶採用如下命令:
DROP USER 'webuser'@'192.168.100.%';
大家可以採用percona-toolkit工具中的pt-show-grants工具來輔助管理mysql權限

八、顯示當前用戶信息:
select user();

九、MySQL權限分配:
權限分佈 :可能設置的權限

表權限:
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

列權限:
'Select', 'Insert', 'Update', 'References'

過程權限:
'Execute', 'Alter Routine', 'Grant'


十、MySQL表和庫操作、以及數據庫備份:

https://www.cnblogs.com/jiangxiaobo/p/7089345.html

十一、grant 操作 MySQL 存儲過程、函數 權限:
http://www.cnblogs.com/fslnet/p/3143344.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章