1. 程式人生 > >MySQL基礎系列之 DCL資料控制語句大全

MySQL基礎系列之 DCL資料控制語句大全

1. CREATE USER建立使用者
例:建立一個使用者 名為jeffrey 密碼mypass 主機localhost
CREATE USER ‘jeffrey’ @‘localhost’ IDENTIFIED BY ‘mypass’;
使用者表檢視剛建立的使用者
SELECT * FROM mysql.user WHERE User =‘jeffrey’;
SELECT Password(‘mypass’);

2. GRANT給使用者授權,是建立新使用者並新增訪問許可權的首選方法
CREATE [privileges] ON db.tb_name TO 使用者名稱 @host
[IDENTIFIED BY ‘password’][,uesr[IDENTIFIED BY ‘password’]]
[WITH GRANT OPTION];
privileges:使用者被授予的許可權UPDATE/INSERT/DELETE等
db.tb_name:資料表
IDENTIFIED BY:密碼
WITH GRANT OPTION:可選引數

例:建立一個新使用者testUser 密碼testpwd 並授予使用者對所有資料表的
SELECT和UPDATE許可權
授權語句:GRANT SELECT,UPDATE ON . TO ‘testUser’@localhost
IDENTIFIED BY ‘testpwd’;
查詢結果
SELECT Host,User,Select_priv,Update_priv
FROM mysql.user WHERE User =‘testUser’;

例:使用grant語句建立一個新的使用者grantUser 密碼grantPwd 使用者grantUser對所有的資料
有查詢 插入許可權並授予GRANT許可權,擁有GRANT許可權使用者可以建立新使用者
GRANT SELECT,UPDATE ON .

TO ‘grantUser’@‘localhost’
IDENTIFIED BY ‘grantPwd’
WITH GRANT OPTION;

3. 直接插入INSERT

從上面新增使用者方法可以看出建立使用者都是在mysql.user表中新增記錄
即可以直接插入使用者資訊
INSERT INTO mysql.user(Host,User,Password,[Priv_list])
VALUES(‘host’,‘username’,PASSWORD(‘password’),privilegeList);

Priv_list:許可權集合INSERT UPDATE DELETE SELECT…
注意:ssl_type,ssl_cipher,x509_issuer,x509_subject無預設值 插入時得賦值
INSERT INTO mysql.user(Host,User,Password,Select_priv,Update_priv,Delete_priv,
ssl_type,ssl_cipher,x509_issuer,x509_subject)
VALUES(‘localhost’,‘nameTest’,PASSWORD(‘123456’),‘y’,‘y’,‘y’,’’,’’,’’,’’);
重新整理授權
FLUSH PRIVILEGES;

4. 刪除使用者
(1)DROP USER ‘username’@localhost;
(2)DELETE FROM mysql.user WHERE Host=‘hostname’ AND User =‘username’;

5. root使用者修改密碼
(1)mysqladmin -u username -h localhost -p password"newpassword";
(2)UPDATE mysql.user SET Password = PASSWORD(‘123456’)
WHERE User=‘root’ AND Host=‘localhost’;

6. 修改其他使用者的密碼
(1)SET Password FOR ‘username’@‘host’ = PASSWORD(‘newpassword’);
(2)UPDATE mysql.user SET Password = PASSWORD(‘newpassword’)
WHERE User = ‘username’;
使用GRANT修改普通使用者密碼(最好)
GRANT USAGE ON . TO ‘username’@‘host’ IDENTIFIED BY ‘newpassword’;

7. 普通使用者修改密碼
普通使用者登入後可以通過SET語句設定自己的密碼
SET Password = PASSWORD(‘newpassword’);

8. root使用者密碼丟失解決辦法
通過特殊方法登入mysql伺服器 然後在root使用者下設定新的密碼
1.使用 --skip-grant-tables選項啟動Mysql伺服器
mysqld --skip-grant-tables
mysqld-nt --skip-grant-tables

9. 收回許可權
REVOKE ALL PRIVILEGES,GRANT OPTION
FROM ‘userName’@‘host’;

10. 收回指定許可權
REVOKE priv_type[INSERT,UPDATE…]
ON tb_name,…(*.*所有資料庫的表) FROM ‘username’@‘host’;
例:REVOKE SELECT ON . FROM ‘grantUser’@‘localhost’;

11. 檢視許可權
SHOW GRANTS FOR ‘username’@‘host’;
SELECT priv_list FROM mysql.user WHERE user='username’AND host=‘hostname’;

12. 開啟事物並提交
start transaction;
delete from tb_name where id=1;
delete from tb_name2 where id=2;
commit;

13. 開啟回滾點
start transaction;
delete from tb_name where id=3;
savepoint test;
delete from tb_name2 where id=4;
rollback to savepoint test;
conmmit;

14. 設定隔離級別(不區分大小寫)
使用者可以用SET TRANSACTION語句改變單個會話或者所有新進連線的隔離級別。它的語法如下:
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}