MySQL 的用户管理与授权管理

1110阅读 0评论2013-06-27 指尖上的幽灵
分类:Mysql/postgreSQL

一、用户管理
1. Mysql的用户通常分为两类:
            root           MySQL数据库的管理员用户
            普通用户   
  
2. 用户帐号:
            username@主机
            usernaem@网络
                    可以使用通配符, %和_    %:表示任意字符
 eg:
  1. root@localhost --> root用户只能通过本机来登录
  2. root@192.168.0.0/24 --> root用户只能通过192.168.0.0网段的主机登录
  3. cacti_user@'192.168.0.%'
3. 创建用户:
  1. > CREATE USER 'user_name'@'host' [IDENTIFIED BY 'password'] ;
4. 为用户更改密码:            
  1. # mysqladmin -u root passwrord 'new_password' -p
  2. # mysqladmin -u root -h this_host_name password 'new_password'
  1. > SET PASSWORD FOR user_name@'host_name'=PASSWORD('password');
5. 删除用户:         
  1. > DROP USER 'user'@'host';
  2. > drop user ''@'localhost'; 删除匿名用户
  3. > DELETE FROM user WHERE HOST='::1';
6. 不用输入密码登录mysql:  
  1. # cd ~
  2. # vi .my.cnf
  3. [mysql]
  4. user=root
  5. host=localhost
  6. password=redhat

二、权限管理 
1. 授权:
  1. > GRANT ALL ON *.* TO user_name IDENTIFIED BY 'redhat';
  2. > GRANT ALL ON *.* TO user_name@'host_name' IDENTIFIED BY 'redhat';
  3. > GRANT SELECT,UPDATE,DELETE ON test.player TO astd@'192.168.0.%' IDENTIFIED BY '123456';
  4. > GRANT ALL PRIVILEGES ON player.* TO haha@localhost IDENTIFIED BY 'centos' WITH GRANT OPTION;
  1. > FLUSH PRIVILEGES; 刷新授权表
收回某个用户的某些权限:    
  1. > REVOKE privilege_list ON db.tables FROM 'user'@'host';
2.查看某个用户的授权情况: 
  1. mysql> SHOW GRANTS FOR astd@'192.168.0.%';
  2. +---------------------------------------------------------------------------------------------------------------+
  3. | Grants for astd@192.168.0.%                                                                                   |
  4. +---------------------------------------------------------------------------------------------------------------+
  5. | GRANT USAGE ON *.* TO 'astd'@'192.168.0.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
  6. | GRANT SELECT, UPDATE, DELETE ON `test`.`player` TO 'astd'@'192.168.0.%'                                       |
  7. +---------------------------------------------------------------------------------------------------------------+
3. 与mysql用户授权相关的表
  1. +---------------------------+
  2. | Tables_in_mysql           |
  3. +---------------------------+
  4. | columns_priv              |
  5. | db                        |
  6. | event                     |
  7. | func                      |
  8. | general_log               |
  9. | host                      |
  10. | ndb_binlog_index          |
  11. | plugin                    |
  12. | proc                      |
  13. | procs_priv                |
  14. | proxies_priv              | --> 与代理相关的授权
  15. | servers                   |
  16. | slow_log                  |
  17. | tables_priv               |
  18. | time_zone                 |
  19. | user                      |
  20. +---------------------------+

GRANT的语法:
  1. GRANT
  2.     priv_type [(column_list)] [, priv_type [(column_list)]] ON [object_type] priv_level
  3.     TO user_specification [, user_specification] ...
  4.     [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
  5.     [WITH with_option ...]

  6. GRANT PROXY ON user_specification
  7.     TO user_specification [, user_specification] ...
  8.     [WITH GRANT OPTION]

  9.     
  10. object_type:
  11.     TABLE | FUNCTION | PROCEDURE

  12. priv_level:
  13.     *
  14.   | *.*
  15.   | db_name.*
  16.   | db_name.tbl_name
  17.   | tbl_name
  18.   | db_name.routine_name

  19. user_specification:
  20.     user
  21.     [ IDENTIFIED BY [PASSWORD] 'password'
  22.       | IDENTIFIED WITH auth_plugin [AS 'auth_string']
  23.     ]

  24. ssl_option:
  25.     SSL
  26.   | X509
  27.   | CIPHER 'cipher'
  28.   | ISSUER 'issuer'
  29.   | SUBJECT 'subject'

  30. with_option:
  31.     GRANT OPTION
  32.   | MAX_QUERIES_PER_HOUR count 平均每个小时最多可以发起多少次查询请求
  33.   | MAX_UPDATES_PER_HOUR count
  34.   | MAX_CONNECTIONS_PER_HOUR count
  35.   | MAX_USER_CONNECTIONS count 一个用户最多允许同时发起的连接请求次数

Global level
     Global privileges apply to all databases on a given server. These privileges are stored in the mysql.user table. GRANT ALL ON *.* and REVOKE ALL ON *.* grant and revoke only global privileges.
  1. >GRANT ALL ON *.* TO 'someuser'@'somehost';
  2. >GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';
Database level
     Database privileges apply to all objects in a given database. These privileges are stored in the mysql.db and mysql.host tables. GRANT ALL ON db_name.* and REVOKE ALL ON db_name.* grant and revoke only database privileges.
  1. >GRANT ALL ON mydb.* TO 'someuser'@'somehost';
  2. >GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';
Table level
     Table privileges apply to all columns in a given table. These privileges are stored in the mysql.tables_priv table. GRANT ALL ON db_name.tbl_name and REVOKE ALL ON db_name.tbl_name grant and revoke only table privileges.  
  1. >GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';
  2. >GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';
    If you specify tbl_name rather than db_name.tbl_name, the statement applies to tbl_name in the default database.
Column level
     Column privileges apply to single columns in a given table. These privileges are stored in the mysql.columns_priv table. When using REVOKE, you must specifythe same columns that were granted. The column or columns for which the privileges are to be granted must be enclosed within parentheses.
  1. >GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';
Routine level
     The CREATE ROUTINE, ALTER ROUTINE, EXECUTE, and GRANT OPTION privileges apply to stored routines (functions and procedures). They can be granted at the global and database levels. Also, except for CREATE ROUTINE, these privileges can be granted at the routine level for individual routines and are stored in the mysql.procs_priv table.
  1. >GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
  2. >GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';







上一篇:mysql学习网址
下一篇:Linux运维经典问题33则(附赠年薪10W+面试题与答案)