国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql 用戶及權限管理 小結

2024-07-24 12:34:47
字體:
來源:轉載
供稿:網友
  MySQL 默認有個root用戶,但是這個用戶權限太大,一般只在管理數據庫時候才用。如果在項目中要連接 MySQL 數據庫,則建議新建一個權限較小的用戶來連接。
 
  在 MySQL 命令行模式下輸入如下命令可以為 MySQL 創建一個新用戶:
 
  CREATE USER username IDENTIFIED BY 'password' ;
  新用戶創建完成,但是此刻如果以此用戶登陸的話,會報錯,因為我們還沒有為這個用戶分配相應權限,分配權限的命令如下:
 
  GRANT ALL PRIVILEGES ON *.* TO 'username' @ 'localhost' IDENTIFIED BY 'password' ;
  授予username用戶在所有數據庫上的所有權限。
 
  如果此時發現剛剛給的權限太大了,如果我們只是想授予它在某個數據庫上的權限,那么需要切換到root 用戶撤銷剛才的權限,重新授權:
 
  EVOKE ALL PRIVILEGES ON *.* FROM 'username' @ 'localhost' ;
  GRANT ALL PRIVILEGES ON wordpress.* TO 'username' @ 'localhost' IDENTIFIED BY 'password' ;
  甚至還可以指定該用戶只能執行 select 和 update 命令:
 
  GRANT SELECT , UPDATE ON wordpress.* TO 'username' @ 'localhost' IDENTIFIED BY 'password' ;
  這樣一來,再次以username登陸 MySQL,只有wordpress數據庫是對其可見的,并且如果你只授權它select權限,那么它就不能執行delete 語句。
 
  另外每當調整權限后,通常需要執行以下語句刷新權限:
 
  FLUSH PRIVILEGES ;
  刪除剛才創建的用戶:
 
  DROP USER username@localhost;
  仔細上面幾個命令,可以發現不管是授權,還是撤銷授權,都要指定響應的host(即 @ 符號后面的內容),因為以上及格命令實際上都是在操作mysql 數據庫中的user表,可以用如下命令查看相應用戶及對應的host:
 
  SELECT User , Host FROM user ;
 
  MySQL Study之--MySQL用戶及權限管理
  MySQL服務器通過MySQL權限表來控制用戶對 數據庫 的訪問,MySQL權限表存放在my sql數據庫 里,由 mysql _install_db腳本初始化。這些MySQL權限表分別user,db,table_priv,columns_priv和host。下面分別介紹一下這些表的結構和內容:
  user權限表 :記錄允許連接到服務器的用戶帳號信息,里面的權限是全局級的。
  db權限表 :記錄各個帳號在各個數據庫上的操作權限。
  table_priv權限表 :記錄數據表級的操作權限。
  columns_priv權限表 :記錄數據列級的操作權限。
  host權限表 :配合db權限表對給定主機上數據庫級操作權限作更細致的控制。這個權限表不受GRANT和REVOKE語句的影響。
 
  案例分析:
  一、創建用戶并授權(root用戶)
  [root@mysrv ~]# mysql -u root -poracle
 
  mysql> select version()/g
  +-------------------------------------------+
  | version() |
  +-------------------------------------------+
  | 5.6.25-enterprise-commercial-advanced-log |
  +-------------------------------------------+
  1 row in set (0.00 sec)
  mysql> show databases;
  +--------------------+
  | Database |
  +--------------------+
  | information_schema |
  | mysql |
  | performance_schema |
  | prod |
  | test |
  +--------------------+
  5 rows in set (0.01 sec) 1、建立tom用戶并授權(特權管理用戶)
 
  mysql> grant all on prod.* to 'tom'@'%' identified by 'tom' with grant option;
  Query OK, 0 rows affected (0.00 sec)
 
  查看用戶創建是否成功:
  mysql> select user,host from user ;
 
  + -------+-----------+
  | user   | host      |
  + -------+-----------+
  | tom   | %         |
  | root  | 127.0.0.1 |
  | root  | ::1       |
  |       | localhost |
  | root  | localhost |
  | scott | localhost |
  |       | mysrv     |
  | root  | mysrv     |
  + -------+-----------+
  8 rows in set (0.00 sec)
  查看tom用戶的授權:
  mysql> show grants for tom;
  +----------------------------------------------------------------------------------------------------+
  | Grants for tom@% |
  +----------------------------------------------------------------------------------------------------+
  | GRANT USAGE ON *.* TO 'tom'@'%' IDENTIFIED BY PASSWORD '*71FF744436C7EA1B954F6276121DB5D2BF68FC07' |
  | GRANT ALL PRIVILEGES ON `prod`.* TO 'tom'@'%' WITH GRANT OPTION |
  +----------------------------------------------------------------------------------------------------+
 
  GRANT 語法 :
  GRANT privileges (columns)
  ON what
  TO user IDENTIFIED BY "password"
  WITH GRANT OPTION 權限列表:
  ALTER: 修改表和索引。
  CREATE: 創建數據庫和表。
  DELETE: 刪除表中已有的記錄。
  DROP: 拋棄(刪除)數據庫和表。
  INDEX: 創建或拋棄索引。
  INSERT: 向表中插入新行。
  REFERENCE: 未用。
  SELECT: 檢索表中的記錄。
  UPDATE: 修改現存表記錄。
  FILE: 讀或寫服務器上的文件。
  PROCESS: 查看服務器中執行的線程信息或殺死線程。
  RELOAD: 重載授權表或清空日志、主機緩存或表緩存。
  SHUTDOWN: 關閉服務器。
  ALL: 所有權限,ALL PRIVILEGES同義詞。
  USAGE: 特殊的 "無權限" 權限。
  用 戶賬戶包括 "username" 和 "host" 兩部分,后者表示該用戶被允許從何地接入。tom@'%' 表示任何地址,默認可以省略。還可以是 "tom@192.168.1.%"、"tom@%.abc.com" 等。數據庫格式為 db@table,可以是 "test.*" 或 "*.*",前者表示 test 數據庫的所有表,后者表示所有數據庫的所有表。
  子句 "WITH GRANT OPTION" 表示該用戶可以為其他用戶分配權限。  2、我們用 root 再創建幾個用戶,然后由 test 數據庫的管理員tom為他們分配權限。
 
  mysql> create user 'tom1' identified by 'tom1' ,'tom2' identified by 'tom2';
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> select user,host from user ;
 
  + -------+-----------+
  | user   | host      |
  + -------+-----------+
  | tom   | %         |
  | tom1  | %         |
  | tom2  | %         |
  | root  | 127.0.0.1 |
  | root  | ::1       |
  |       | localhost |
  | root  | localhost |
  | scott | localhost |
  |       | mysrv     |
  | root  | mysrv     |
  + -------+-----------+
  10 rows in set (0.00 sec)
  root用戶退出,tom登陸,并授權用戶訪問prod庫
 
  [root@mysrv ~]# mysql -u tom -ptom
  ERROR 1045 (28000): Access denied for user 'tom'@'localhost' (using password: YES)
 
  tom用戶竟不能登陸?。?!
 
  再對tom用戶授權:
  mysql> grant all on prod.* to 'tom'@'localhost' identified by 'tom' with grant option;;
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> show grants for tom;
  +----------------------------------------------------------------------------------------------------+
  | Grants for tom@% |
  +----------------------------------------------------------------------------------------------------+
  | GRANT USAGE ON *.* TO 'tom'@'%' IDENTIFIED BY PASSWORD '*71FF744436C7EA1B954F6276121DB5D2BF68FC07' |
  | GRANT ALL PRIVILEGES ON `prod`.* TO 'tom'@'%' WITH GRANT OPTION |
  +----------------------------------------------------------------------------------------------------+
  2 rows in set (0.00 sec)
 
  mysql> use mysql;
  Database changed
  mysql> select user,host from user ;
 
  + -------+-----------+
  | user   | host      |
  + -------+-----------+
  | tom   | %         |
  | tom1  | %         |
  | tom2  | %         |
  | root  | 127.0.0.1 |
  | root  | ::1       |
  |       | localhost |
  | root  | localhost |
  | scott | localhost |
  | tom   | localhost |
  |       | mysrv     |
  | root  | mysrv     |
  + -------+-----------+
  11 rows in set (0.00 sec)
  tom登陸:
  [root@mysrv ~]# mysql -u tom -ptom prod
  mysql> select database();
  +------------+
  | database() |
  +------------+
  | prod |
  +------------+
  1 row in set (0.01 sec)
 
  mysql> select current_user();
  +----------------+
  | current_user() |
  +----------------+
  | tom@localhost |
  +----------------+
  1 row in set (0.00 sec)
 
  創建表:
 
  mysql> show tables;
  +----------------+
  | Tables_in_prod |
  +----------------+
  | t1 |
  +----------------+
  1 row in set (0.00 sec)
 
  mysql> create table t2 as select * from t1;
  Query OK, 3 rows affected (0.15 sec)
  Records: 3 Duplicates: 0 Warnings: 0
 
  查看表信息:
 
  mysql> desc t2;
  +-------+-------------+------+-----+---------+-------+
  | Field | Type | Null | Key | Default | Extra |
  +-------+-------------+------+-----+---------+-------+
  | id | int(11) | YES | | NULL | |
  | name | varchar(10) | YES | | NULL | |
  +-------+-------------+------+-----+---------+-------+
  2 rows in set (0.01 sec)
 
  mysql> show create table t2;
  +-------+---------------------------------------------------------------------------------------------------------------------------+
  | Table | Create Table |
  +-------+---------------------------------------------------------------------------------------------------------------------------+
  | t2 | CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
  +-------+---------------------------------------------------------------------------------------------------------------------------+
  1 row in set (0.01 sec)
 
  mysql> show create table t2/G;
  *************************** 1. row ***************************
  Table: t2
  Create Table: CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  1 row in set (0.00 sec)
 
  mysql> select * from t2;
  +------+-------+
  | id | name |
  +------+-------+
  | 10 | tom |
  | 20 | jerry |
  | 30 | rose |
  +------+-------+
  3 rows in set (0.00 sec)
 
  3、tom用戶為tom1,tom2授權
  mysql> grant select on prod.* to tom1;
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> grant select on prod.* to tom2;
  Query OK, 0 rows affected (0.02 sec)
 
  mysql> grant insert,update on prod.* to tom2;
  Query OK, 0 rows affected (0.00 sec)
 
  tom2登陸(從遠程登陸):
 
  C:/Users/Administrator>mysql -h 192.168.8.240 -utom2 -ptom2
 
  mysql> select database();
  +------------+
  | database() |
  +------------+
  | NULL |
  +------------+
  1 row in set (0.00 sec)
 
  mysql> use prod;
  Database changed
  mysql> select database();
  +------------+
  | database() |
  +------------+
  | prod |
  +------------+
  1 row in set (0.00 sec)
 
  mysql> select current_user();
  +----------------+
  | current_user() |
  +----------------+
  | tom2@% |
  +----------------+
  1 row in set (0.00 sec)
 
  mysql> show grants for tom2;
  +------------------------------------------------------------------+
  | Grants for tom2@% |
  +------------------------------------------------------------------+
  | GRANT USAGE ON *.* TO 'tom2'@'%' IDENTIFIED BY PASSWORD |
  | GRANT SELECT, INSERT, UPDATE ON `prod`.* TO 'tom2'@'%' |
  +------------------------------------------------------------------+
  2 rows in set (0.00 sec)
 
  mysql> show tables;
  +----------------+
  | Tables_in_prod |
  +----------------+
  | t1 |
  | t2 |
  +----------------+
  2 rows in set (0.00 sec)
 
  mysql> select * from t1;
  +------+-------+
  | id | name |
  +------+-------+
  | 10 | tom |
  | 20 | jerry |
  | 30 | rose |
  +------+-------+
  3 rows in set (0.00 sec)
 
  mysql> select * from t2;
  +------+-------+
  | id | name |
  +------+-------+
  | 10 | tom |
  | 20 | jerry |
  | 30 | rose |
  +------+-------+
  3 rows in set (0.00 sec)
 
  mysql> insert into t1 values (40,'john');
  Query OK, 1 row affected (0.00 sec)
  mysql> commit;
  Query OK, 0 rows affected (0.09 sec)
 
  mysql> select * from t1;
  +------+-------+
  | id | name |
  +------+-------+
  | 10 | tom |
  | 20 | jerry |
  | 30 | rose |
  | 40 | john |
  +------+-------+
  4 rows in set (0.00 sec)
 
  mysql> update t1 set name='ellen' where id=40;
  Query OK, 1 row affected (0.01 sec)
  Rows matched: 1 Changed: 1 Warnings: 0
 
  mysql> select * from t1;
  +------+-------+
  | id | name |
  +------+-------+
  | 10 | tom |
  | 20 | jerry |
  | 30 | rose |
  | 40 | ellen |
  +------+-------+
  4 rows in set (0.00 sec)
 
  mysql> delete from t1;
  ERROR 1142 (42000): DELETE command denied to user 'tom2'@'192.168.8.254' for tab
  le 't1'
  mysql> commit;
  Query OK, 0 rows affected (0.05 sec)
 
  mysql> select * from t1;
  +------+-------+
  | id | name |
  +------+-------+
  | 10 | tom |
  | 20 | jerry |
  | 30 | rose |
  | 40 | ellen |
  +------+-------+
  4 rows in set (0.00 sec) 4、回收tom2的update權限:
  mysql> revoke update on prod.* from tom2;
  Query OK, 0 rows affected (0.00 sec)
 
  tom2再重新登陸:
  C:/Users/Administrator>mysql -h 192.168.8.240 -utom2 -ptom2
 
  mysql> use prod;
  Database changed
  mysql> update t1 set name='lily' where id=10;
  ERROR 1142 (42000): UPDATE command denied to user 'tom2'@'192.168.8.254' for tab
  le 't1'
  ---update失敗!
 
  二、修改用戶口令:
 
  1、root用戶修改普通用戶口令
  mysql> set password for tom1=password('oracle');
  Query OK, 0 rows affected (0.01 sec)
 
  mysql> flush privileges;
  Query OK, 0 rows affected (0.00 sec)
 
  tom1重新登陸:
  C:/Users/Administrator>mysql -h 192.168.8.240 -utom1 -ptom1
  Warning: Using a password on the command line interface can be insecure.
  ERROR 1045 (28000): Access denied for user 'tom1'@'192.168.8.254' (using passwor
  d: YES)
  ---舊口令登陸失敗!
 
  C:/Users/Administrator>mysql -h 192.168.8.240 -utom1 -poracle
  mysql>
 
  2、普通用戶修改自己密碼:
  C:/Users/Administrator>mysql -h 192.168.8.240 -utom1 -poracle
  mysql> set password=password('tom1');
  Query OK, 0 rows affected (0.00 sec)
 
  重新登陸:
  C:/Users/Administrator>mysql -h 192.168.8.240 -utom1 -ptom1
  mysql>
  ---新密碼登陸成功 !
 
  三、刪除用戶:
  1、回收用戶所有權限
  mysql> revoke all on prod.* from tom2;
  Query OK, 0 rows affected (0.01 sec)
 
  2、刪除用戶
  mysql> drop user tom2;
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> flush privileges;
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> select user,host from user;
 
  + -------+-----------+
  | user   | host      |
  + -------+-----------+
  | jerry | %         |
  | rose  | %         |
  | tom   | %         |
  | tom1  | %         |
  | root  | 127.0.0.1 |
  | root  | ::1       |
  |       | localhost |
  | jerry | localhost |
  | root  | localhost |
  | rose  | localhost |
  | scott | localhost |
  | tom   | localhost |
  |       | mysrv     |
  | root  | mysrv     |
  + -------+-----------+
  14 rows in set (0.00 sec)
  ------- 摘要 --------------------------------------
 
  創建用戶:
  GRANT insert, update ON testdb.* TO user1@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
  CREATE USER user2 IDENTIFIED BY 'password';
  分配權限:
  GRANT select ON testdb.* TO user2;
  查看權限:
  SHOW GRANTS FOR user1;
  修改密碼:
  SET PASSWORD FOR user1 = PASSWORD('newpwd');
  SET PASSWORD = PASSWORD('newpwd');
  移除權限:
  REVOKE all ON *.* FROM user1;
  刪除用戶:
  DROP USER user1;
  數據庫列表:
  SHOW DATABASES;
  數據表列表:
  SHOW TABLES;
  當前數據庫:
  SELECT DATABASE();
  當前用戶:
  SELECT USER();
  數據表結構:
  DESCRIBE table1;
  刷新權限:
  FLUSH PRIVILEGES;
 
  grant和revoke可以在幾個層次上控制訪問權限
  1,整個服務器,使用 grant ALL 和revoke ALL
  2,整個數據庫,使用on database.*
  3,特點表,使用on database.table
  4,特定的列
  5,特定的存儲過程
 
  user表中host列的值的意義
  % 匹配所有主機
  localhost localhost不會被解析成IP地址,直接通過UNIXsocket連接
  127.0.0.1 會通過TCP/IP協議連接,并且只能在本機訪問;
  ::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1
 
  grant 普通數據用戶,查詢、插入、更新、刪除 數據庫中所有表數據的權利。
  grant select on testdb.* to common_user@’%’
  grant insert on testdb.* to common_user@’%’
  grant update on testdb.* to common_user@’%’
  grant delete on testdb.* to common_user@’%’
  或者,用一條 MySQL 命令來替代:
  grant select, insert, update, delete on testdb.* to common_user@’%’
  grant 數據庫開發人員,創建表、索引、視圖、存儲過程、函數。。。等權限。
  grant 創建、修改、刪除 MySQL 數據表結構權限。
  grant create on testdb.* to developer@’192.168.0.%’;
  grant alter on testdb.* to developer@’192.168.0.%’;
  grant drop on testdb.* to developer@’192.168.0.%’;
  grant 操作 MySQL 外鍵權限。
  grant references on testdb.* to developer@’192.168.0.%’;
  grant 操作 MySQL 臨時表權限。
  grant create temporary tables on testdb.* to developer@’192.168.0.%’;
  grant 操作 MySQL 索引權限。
  grant index on testdb.* to developer@’192.168.0.%’;
  grant 操作 MySQL 視圖、查看視圖源代碼 權限。
  grant create view on testdb.* to developer@’192.168.0.%’;
  grant show view on testdb.* to developer@’192.168.0.%’;
  grant 操作 MySQL 存儲過程、函數 權限。
  grant create routine on testdb.* to developer@’192.168.0.%’; -- now, can show procedure status
  grant alter routine on testdb.* to developer@’192.168.0.%’; -- now, you can drop a procedure
  grant execute on testdb.* to developer@’192.168.0.%’;
  grant 普通 DBA 管理某個 MySQL 數據庫的權限。
  grant all privileges on testdb to dba@’localhost’
  其中,關鍵字 “privileges” 可以省略。
  grant 高級 DBA 管理 MySQL 中所有數據庫的權限。
  grant all on *.* to dba@’localhost’
 
  MySQL grant 權限,分別可以作用在多個層次上。
  1. grant 作用在整個 MySQL 服務器上:
  grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。
  grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
  2. grant 作用在單個數據庫上:
  grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
  3. grant 作用在單個數據表上:
  grant select, insert, update, delete on testdb.orders to dba@localhost;
  4. grant 作用在表中的列上:
  grant select(id, se, rank) on testdb.apache_log to dba@localhost;
  5. grant 作用在存儲過程、函數上:
  grant execute on procedure testdb.pr_add to ’dba’@’localhost’
  grant execute on function testdb.fn_add to ’dba’@’localhost’
 
  注意:修改完權限以后 一定要刷新服務,或者重啟服務,刷新服務用:FLUSH PRIVILEGES。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河西区| 建瓯市| 巩义市| 伊春市| 清水河县| 松原市| 贵港市| 隆德县| 集贤县| 永福县| 马尔康县| 乌鲁木齐市| 中牟县| 胶州市| 闵行区| 龙泉市| 茌平县| 阿勒泰市| 呼玛县| 济源市| 宁强县| 珠海市| 兰州市| 合山市| 德格县| 自贡市| 通河县| 县级市| 土默特左旗| 邵阳县| 桦甸市| 调兵山市| 东乌珠穆沁旗| 福安市| 灵台县| 神池县| 西乡县| 衡东县| 雅江县| 徐汇区| 商丘市|