DCL-MYSQL

權限分類:
USAGE       --無權限,只有登錄數據庫,只可以使用test或test_*數據庫
ALL        --所有權限
select/update/delete/super/slave/reload --指定的權限
with grant option     --允許把自己的權限授予其它用戶(此用戶擁有建立賬號的權限)

權限級別:
 1、*.*   --全庫、全表(mysql.user)
 2、mysql.*  --mysql庫下所有表(某庫中的所有表)(mysql.db)
 3、mysql.user  --mysql庫中user表(單表)(mysql.table_priv)
 4、mysql.user.host --mysql庫中user表的host列(mysql.columns_priv)

用戶權限:
 username@localhost
  1、username   --你被授予了什麼權限
  2、username/password --賬號密碼
  3、localhost   --表示你可以在哪裏登錄(這裏表示只能本機通過socket登錄)
 
  user@localhost  --表示user只能在本地通過socket登錄服務器
  [email protected]  --表示user用戶只能在192.168.0.1登錄數據庫服務器
  [email protected]/255.555.255.0
       --指定某個子網的主機可以登錄數據庫
  user@%    --表示user用戶能在所有的機器上登錄數據庫服務器

 

新建user02用戶, 要求user02只能在本機登錄而且對DB這個庫的所有表擁有完全控制的權限:
mysql> grant all on DB.* to user02@'localhost' identified by '123';
mysql> select user,password,host from mysql.user;  --查看用戶創建是否成功

更改user02在所有機器上都能登錄數據庫.
mysql> update mysql.user set host='%' where user='user02';
mysql> flush privileges;

 

讓user02可以把自己的權限授予其它用戶:
mysql> grant ALL on DB.* to user02@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)


查看權限:
mysql> show grants; --查看自己的權限
mysql> show grants for user02@'%'; --查看指定用戶的權限


權限的作用範圍(*.* database.* database.table)
mysql> grant select,update on DB.t3 to user04@'localhost' identified by '123';

列的授權:
mysql> grant update (user) on mysql.user to user03@'%';
mysql> grant update (user,host,password) on mysql.user to user03@'%';

權限的保存位置:
mysql.user   --所有mysql用戶的賬號和密碼,以及對用戶對全庫全表權限(*.*)
mysql.db    --非mysql庫的授權都保存在此(db.*)
mysql.table_priv  --某庫某表的授權(db.table)
mysql.columns_priv  --某庫某表某列的授權(db.table.col1)
mysql.procs_priv  --某庫存儲過程的授權


------------------
revoke
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost'; --撤消指定的權限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ... --撤消所有的權限

mysql> drop user user02;  --撤消所有權限後把用戶一併刪除
Query OK, 0 rows affected (0.00 sec)


-----------------
忘記root密碼的操作:

mysql的用戶驗證邏輯:
mysqluser-->mysqld(3306/scoket)-->(host/user/password)-->mysql.user


1、關閉正在運行的mysql服務器
2、重新啓mysql,但啓動的過程讓mysql跳過用戶驗證(mysql.user),然後改密碼
3、安全關閉mysql,然後再啓動,這樣密碼就被重置了。
# service mysql stop 或 pkill -9 mysql
# cd /opt/mysql-glibc
# /opt/mysql-glibc/bin/mysqld_safe --defaults-file=/data2/my.cnf --skip-grant-tables &
mysql> update mysql.user set password=password('147258369') where user='root';
# mysqladmin shutdown
# /opt/mysql-glibc/bin/mysqld_safe --defaults-file=/data2/my.cnf &

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