create user 'liub'@'localhost' identified by 'liub'
create table g_user(
id varchar(10),
username varchar(20),
userpwd varchar(20)
insert into g_user values ('1','liub','liub');
insert into g_user values ('2','lik','lik');
mysql.user
mysql.db
mysql.tables_priv
mysql.columns_priv
select * from g_user;
-- 列級許可權
grant select(id,username) on g_user to 'liub'@'localhost';
-- 表級許可權
grant select on g_user to 'liub'@'localhost';
-- 庫級許可權
grant select on test.* to 'liub'@'localhost';
show grants for 'liub'@'localhost';
select * from columns_priv
select * from tables_priv
select * from db
use test
grant insert on g_user to 'liub'@'localhost'
select * from mysql.user
flush privileges;
show grants for 'liub'@'localhost'
mysql.user,mysql.db,mysql.host,mysql.table_priv 和mysql.column_priv
。由於許可權資訊資料量比較小,而且訪問又非常頻繁,所以mysql 在啟動的時候,就會將所有的許可權資訊都load 到記憶體中儲存在幾個特定的結構中。所以才有我們每次手工修改了許可權相關的表之後,都需要執行
flush privileges
show grants for 'income'@'%'
global level
grant select,update,delete,insert on *.* to 'def'@'localhost';
在驗證所有所需許可權的時候,mysql 首先會查詢儲存在記憶體結構中的許可權資料,首先查詢global level 許可權,如果所需許可權在global level 都有定義(grant 或者revoke),則完成許可權校驗(通過或者拒絕),如果沒有找到所有許可權的定義,則會繼續往後查詢database level 許可權,進行global level 未定義的所需許可權的校驗,如果仍然沒有能夠找到所有所需許可權的定義,mysql 會繼續往更小範圍的許可權定義域查詢,也就是tablelevel,最後則是column level 或者routine level。
一, 建立使用者:
命令:create user 'username'@'host' identified by 'password';
說明:username - 你將建立的使用者名稱, host - 指定該使用者在哪個主機上可以登陸,如果是本地使用者可用localhost, 如果想讓該使用者可以從任意遠端主機登陸,可以使用萬用字元%. password - 該使用者的登陸密碼,密碼可以為空,如果為空則該使用者可以不需要密碼登陸伺服器.
例子: create user 'dog'@'localhost' identified by '123456';
create user 'pig'@'192.168.1.101' idendified by '123456';
create user 'pig'@'%' identified by '123456';
create user 'pig'@'%' identified by '';
create user 'pig'@'%';
二,授權:
命令:grant privileges on databasename.tablename to 'username'@'host'
說明: privileges - 使用者的操作許可權,如select , insert , update 等.如果要授予所的許可權則使用all.;databasename - 資料庫名,tablename-表名,如果要授予該使用者對所有資料庫和表的相應操作許可權則可用*表示, 如*.*.
例子: grant select, insert on test.user to 'pig'@'%';
grant all on *.* to 'pig'@'%';
注意:用以上命令授權的使用者不能給其它使用者授權,如果想讓該使用者可以授權,用以下命令:
grant privileges on databasename.tablename to 'username'@'host' with grant option;
三.設定與更改使用者密碼
命令:set password for 'username'@'host' = password('newpassword');如果是當前登陸使用者用set password = password("newpassword");
例子: set password for 'pig'@'%' = password("123456");
四.撤銷使用者許可權
命令: revoke privilege on databasename.tablename from 'username'@'host';
說明: privilege, databasename, tablename - 同授權部分.
例子: revoke select on *.* from 'pig'@'%';
注意: 假如你在給使用者'pig'@'%'授權的時候是這樣的(或類似的):grant select on test.user to 'pig'@'%', 則在使用revoke select on *.* from 'pig'@'%';命令並不能撤銷該使用者對test資料庫中user表的select 操作.相反,如果授權使用的是grant select on *.* to 'pig'@'%';則revoke select on test.user from 'pig'@'%';命令也不能撤銷該使用者對test資料庫中user表的select 許可權.
具體資訊可以用命令show grants for 'pig'@'%'; 檢視.
五.刪除使用者
命令: drop user 'username'@'host';
MySQL許可權系統
mysql的許可權系統圍繞著兩個概念 1 認證 確定使用者是否允許連線資料庫伺服器 2 授權 確定使用者是否擁有足夠的許可權執行查詢請求等。與許可權相關的表有user,db,host,tables priv,columns priv。每個表的字段都可分為兩類,一類為作用域字段,一類為許可權字段。作用...
mysql 訪問 MySQL的訪問許可權系統
看到很多提出關於mysql登入不上伺服器的問題,包括有的是在php中呼叫mysql時發生的不能登入mysql資料庫伺服器的問題,以為是php出了問題。其實是mysql許可權的問題。mysql的許可權系統在mysql的手冊中是很長的一章,我把它列印出來足足印了20多頁 這裡就將 看到很多提出關於mys...
mysql 訪問 MySQL的訪問許可權系統
看到很多提出關於mysql登入不上伺服器的問題,包括有的是在php中呼叫mysql時發生的不能登入mysql資料庫伺服器的問題,以為是php出了問題。其實是mysql許可權的問題。mysql的許可權系統在mysql的手冊中是很長的一章,我把它列印出來足足印了20多頁 這裡就將 看到很多提出關於mys...