mysql 系統許可權 MySQL 的許可權系統

2021-10-20 22:33:10 字數 3259 閱讀 6041

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...