mysql没有写入权限_MySQL的权限系统
一、MySQL權限系統
一)MySQL權限系統介紹
權限系統的作用:授予來自某個主機的某個用戶可以查詢、插入、修改、刪除等數據庫操作的權限
不能明確指定拒絕某個用戶的連接
權限控制(授權與回收)的執行語句包括create user,grant,revoke
授權后的權限都會存放在MySQL的內部數據庫(MySQL)中,并在數據庫啟動之后把權限信息復制到內存中
MySQL用戶的認證信息不光包括用戶名,還要包括發起的主機
SHOW GRANTS FOR ‘joe’@‘office.host.com’;
SHOW GRANTS FOR ‘joe’@‘home.host.com’;
查看mysql實例默認root用戶的權限(來自localhost)
All/All Privileges權限代表全局或全數據庫對象級別的所有權限
Alter權限代表允許修改表結構的權限,但必須要求有create和insert權限配合。如果是rename表名,則要求有alter和drop原表, create和insert新表的權限
alter routine權限代表允許修改或刪除存儲過程、函數的權限
Create權限代表允許創建新的數據庫和表的權限
Create routine權限代表允許創建存儲過程、函數的權限
Create user權限代表允許創建、修改、刪除、重命名user的權限
create view權限代表允許創建視圖的權限
delete權限代表允許刪除行數據的權限
drop權限代表允許刪除數據庫、表、視圖的權限,包括truncate table命令
Event權限代表允許查詢,創建,修改,刪除MySQL事件
Execute權限代表允許執行存儲過程和函數的權限
Grant option權限代表是否允許此用戶授權或者收回給其他用戶你給予的權限
index權限代表是否允許創建和刪除索引
Insert權限代表是否允許在表里插入數據,同時在執行analyze table,optimizetable,repair table語句的時候也需要insert權限
Reference權限是在5.7.6版本之后引入,代表是否允許創建外鍵Select權限代表允許從表中查看數據,某些不查詢表數據的select執行則不需要此權限,如Select 1+1, Select PI()+2;而且select權限在執行update/delete語句中含有where條件的情況下也是需要的
Show databases權限代表通過執行show databases命令查看所有的數據庫名
Show view權限代表通過執行show create view命令查看視圖創建的語句
Shutdown權限代表允許關閉數據庫實例,執行語句包括mysqladmin shutdown
Super權限代表允許執行一系列數據庫管理命令,包括kill強制關閉某個連接命令, change master to創建復制關系命令,以及create/alter/drop server等命令
Trigger權限代表允許創建,刪除,執行,顯示觸發器的權限
Update權限代表允許修改表中的數據的權限
Usage權限是創建一個用戶之后的默認權限,其本身代表連接登錄權限
create user testuser@localhost;
show grants for testuer@localhost;
二)系統權限表
1、權限存儲位置
權限存儲在mysql庫的user,db, tables_priv, columns_priv, andprocs_priv這幾個系統表中,待MySQL實例啟動后就加載到內存中
User表:存放用戶賬戶信息以及全局級別(所有數據庫)權限,決定了來自哪些主機的哪些用戶可以訪問數據庫實例,如果有全局權限則意味著對所有數據庫都有此權限
Db表:存放數據庫級別的權限,決定了來自哪些主機的哪些用戶可以訪問此數據庫
Tables_priv表:存放表級別的權限,決定了來自哪些主機的哪些用戶可以訪問數據庫的這個表
Columns_priv表:存放列級別的權限,決定了來自哪些主機的哪些用戶可以訪問數據庫表的這個字段
Procs_priv表:存放存儲過程和函數級別的權限
2、User權限表結構中的特殊字段
Plugin,password,authentication_string三個字段存放用戶認證信息
Password_expired設置成’Y’則表明允許DBA將此用戶的密碼設置成過期而且過期后要求用戶的使用者重置密碼(alter user/set password重置密碼)
Password_last_changed作為一個時間戳字段代表密碼上次修改時間,執行create user/alter user/set password/grant等命令創建用戶或修改用戶密碼時此數值自動更新
Password_lifetime代表從password_last_changed時間開始此密碼過期的天數
Account_locked代表此用戶被鎖住,無法使用
3、Tables_priv和columns_priv權限值
4、procs_priv權限表結構
Routine_type是枚舉類型,代表是存儲過程還是函數
Timestamp和grantor兩個字段暫時沒用
5、權限認證中的大小寫敏感問題
字段user,password,authencation_string,db,table_name大小寫敏感
字段host,column_name,routine_name大小寫不敏感
三)MySQL授權用戶
1、MySQL的授權用戶由兩部分組成: 用戶名和登錄主機名
表達用戶的語法為‘user_name’@‘host_name’
單引號不是必須,但如果其中包含特殊字符則是必須的
‘’@‘localhost’代表匿名登錄的用戶
Host_name可以使主機名或者ipv4/ipv6的地址。 Localhost代表本機, 127.0.0.1代表ipv4的本機地址, ::1代表ipv6的本機地址
Host_name字段允許使用%和_兩個匹配字符,比如’%’代表所有主機, ’%.mysql.com’代表來自mysql.com這個域名下的所有主機, ‘192.168.1.%’代表所有來自192.168.1網段的主機
2、MySQL修改權限的生效
執行Grant,revoke,set password,rename user命令修改權限之后, MySQL會自動將修改后的權限信息同步加載到系統內存中
如果執行insert/update/delete操作上述的系統權限表之后,則必須再執行刷新權限命令才能同步到系統內存中,刷新權限命令包括: flush privileges/mysqladmin flush-privileges/mysqladmin reload
如果是修改tables和columns級別的權限,則客戶端的下次操作新權限就會生效
如果是修改database級別的權限,則新權限在客戶端執行use database命令后生效
如果是修改global級別的權限,則需要重新創建連接新權限才能生效
--skip-grant-tables可以跳過所有系統權限表而允許所有用戶登錄,只在特殊情況下暫時使用
3、權限管理
分配權限
grant all privileges on tableName.* to 'username'@'%';
查看用戶授權情況
show grants for 'username'@'%';
show create user'username'@'%'\G
回收權限
revoke select on `sys`.`sys_config` from 'mysql.sys'@localhost;
刪除用戶
drop user 'username'@'localhost';
drop user 'username'@'%';
4、設置MySQL用戶的密碼
創建用戶時設置密碼
create user 'username'@'%' identified by 'password';
修改其他用戶密碼的方式
###登錄服務器修改密碼
方法一
ALTER USER'username'@'localhost' IDENTIFIED BY 'mypass';
方法二
SET PASSWORD FOR'username'@'localhost' = PASSWORD('mypass');
方法三
GRANT USAGE ON*.* TO 'username'@'localhost' IDENTIFIED BY 'mypass';
###在命令行修改密碼
方法四
mysqladmin-u username -h host_name password "new_password";
修改本身用戶密碼的方式
方法一
ALTER USER USER() IDENTIFIED BY'mypass';
方法二
SET PASSWORD= PASSWORD('mypass');
四)設置MySQL用戶密碼過期策略
設置系統參數default_password_lifetime作用于所有的用戶賬戶
default_password_lifetime=180 設置180天過期
default_password_lifetime=0 設置密碼不過期
如果為每個用戶設置了密碼過期策略,則會覆蓋上述系統參數
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE NEVER; 密碼不過期
ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE DEFAULT; 默認過期策略
手動強制某個用戶密碼過期
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
五)MySQL用戶lock
通過執行create user/alter user命令中帶account lock/unlock子句設置用戶的lock狀態
Create user語句默認的用戶是unlock狀態
mysql>create user abc2@localhost identified by 'mysql'account lock;
Query OK,0 rows affected (0.01sec)
Alter user語句默認不會修改用戶的lock/unlock狀態
mysql> alter user 'mysql.sys'@localhost account lock;
Query OK,0 rows affected (0.00sec)
mysql> alter user 'mysql.sys'@localhost account unlock;
Query OK,0 rows affected (0.00sec)
當客戶端使用lock狀態的用戶登錄MySQL時,會收到如此報錯
Access deniedfor user 'user_name'@'host_name'.
Account is locked.
六)企業應用中的常規MySQL用戶
企業生產系統中MySQL用戶的創建通常由DBA統一協調創建,而且按需創建
? DBA通常直接使用root用戶來管理數據庫
? 通常會創建指定業務數據庫上的增刪改查、臨時表、執行存儲過程的權限給應用程序來連接數據庫
? Create user app_full identified by ‘mysql’;
? Grantselect,update,insert,delete,create temporary tables,execute on esn.* toapp_full@’10.0.0.%’;
? mysql> show grants for app_full@'10.0.0.%';
?+------------------------------------------------------------------------------------------------------------+?| Grants for app_full@10.0.0.% |?+------------------------------------------------------------------------------------------------------------+?| GRANT USAGE ON *.* TO 'app_full'@'10.0.0.%' |?| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, EXECUTE ON `esn`.*TO 'app_full'@'10.0.0.%' |?通常也會創建指定業務數據庫上的只讀權限給特定應用程序或某些高級別人員來查詢數據,防止數據被修改
? Create user app_readonly identified by ‘mysql’;
? Grantselect on esn.* to app_readonly identified by ‘mysq’;
七)企業應用中的MySQL用戶密碼設定
企業生產系統中MySQL用戶的密碼設定有嚴格的規范,通常要有密碼復雜度、密碼長度等要求
搜索網上的密碼生成器,能按要求生成隨機密碼
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql没有写入权限_MySQL的权限系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中如何输入矩阵_python
- 下一篇: android studio电影院选座,