对于mysql的用户管理,连接各个数据库时候最好不要用root帐号,需要分配对应的用户,保证mysql数据库的安全和方便用户管理。
一:用户创建
方法1:执行命令
mysql》 CREATE USER 'username'@'host' IDENTIFIED BY 'password';
参数分析:
username:用户名
host:指定用户可以登录的主机,本地登录的话是localhost,远程登录的话是 % 通配符,还可以指定单独的ip
password:用户登录密码,不指定的话用户可以不输入密码就可登录
例子:
mysql> CREATE USER 'lxh'@'localhost' IDENTIFIED BY '123456'; //只允许本地登录
mysql> CREATE USER 'lxh'@'%' IDENTIFIED BY '123456'; //允许用户远程登录
mysql> CREATE USER 'lxh'@'%' IDENTIFIED BY ''; //允许用户可不输入密码登录(建议不要这样做)
方法2:直接忘mysql数据库中的user表插入用户数据
mysql> user mysql;
mysql> insert into user(Host,User,Password) values("localhost","lxh",password("123456"));
二:用户授权
首先得登录root帐号(或者有可以授权权限的帐号)
全部权限授权:
mysql> GRANT all privileges ON databasename.tablename TO 'username'@'host';
部分权限授权
mysql> GRANT SELECT, INSERT ON databasename.tablename TO 'username'@'host';
参数分析:
databasename:要授权的数据库名称 ,如果是全部的数据库,可以用 *
tablename:要授权的数据库中的表名称,如果是全部的表,可以用 *
username:mysql用户名称
host:主机名称,可以使本机 localhost,也可以是远程 % (这要看用户是本机用户还是远程用户)
ps:如果想让用户可以给其他用户授权,执行以下命令即可:
mysql> GRANT all privileges ON databasename.tablename TO ‘username’@’host’ WITH GRANT OPTION;
授权后记得刷新下系统权限表:
mysql> flush privileges;
三:修改用户的密码
mysql> grant all privileges on databasename.* to username@localhost identified by 'newpwd';
或者直接利用mysql语句执行
mysql> update mysql.user set password=password('新密码') where User="lxh" and Host="localhost";
四:删除用户
mysql> Delete FROM user Where User="lxh" and Host="localhost";
mysql> flush privileges;
ps:每次的更新操作后最好执行刷新系统权限表 flush privileges;
五:查看用户权限的两种方法
一. 使用MySQL grants
mysql> show grants for username@localhost;
实例:
mysql> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.01 sec)
二. 直接通过mysql select查询语句:
mysql> select * from mysql.user where user='test' and host='127.0.0.1' \G;
*************************** 1. row ***************************
Host: 127.0.0.1
User: test
Password: *EB3C643405D7F53BD4BF7FBA98DCF5641E228833
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string:
password_expired: N
1 row in set (0.00 sec)
可以看到Select_priv,Insert_priv,Update_priv...等为N表示没有权限,该用户权限一目了然.这时可以使用命令
六: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@’%’
9>.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.%’;
10>.grant 普通 DBA 管理某个 MySQL 数据库的权限。
grant all privileges on testdb to dba@’localhost’
其中,关键字 “privileges” 可以省略。
11>.grant 高级 DBA 管理 MySQL 中所有数据库的权限。
grant all on *.* to dba@’localhost’
12>.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。