前言
在实际开发中,基于安全性考虑,不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但是使用root时,因为一些误操作而产生的影响,那将会是很大的。对DBA而言,不同的使用者授予不同权限,会是比较恰当的处理方法。例如:一个只进行数据插入的用户不应赋予其删除数据的权限。一个只能查看数据的用户不授予增删改的权限。
查看当前使用的数据库
select database();
查看当前使用的账户
show processlist;
查看数据库的所有用户
select * from mysql.user;
或者
use mysql;
select * from user;
查看某个用户具有的权限
show grants for ‘用户名’@’登入地址’;
例如:show grants for ‘yy’@’localhost’;
修改用户密码
update user set password=password(‘新密码’) where user = ‘用户名’;
MySQL数据库的权限管理
windows中MySQL以服务形式存在,在使用前应确保此服务已经启动,未启动可用net start mysql命令启动,或者进入控制面板中的服务设置。
Linux中启动时可用“/etc/rc.d/init.d/mysqld start”命令,注意启动者应具有管理员权限。
MySQL的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。
GRANT的语法
grant [权限] on [在哪些数据库/表] to [新用户名称]@[登入地址] identified by [“密码”];
– usage只允许登入
grant usage on . to NewUserName@HostName identified by “password”;
– 授予全部权限
grant all on mydb.* to NewUserName@HostName identified by “password” ;
– 授予select insert update权限,作用范围在mydb数据库下的所有表
grant select,insert,update on mydb.* to NewUserName@HostName identified by “password”;
– 授予pdate、delete权限,作用范围在mydb数据库下的TestTable
grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”;
CREATE的语法
首先创建用户:create user [新建的用户名]@[登入地址] identified by [‘密码’];
然后授权:grant [权限,可以多项] on [在哪些数据库/表] to [新用户名称]@[登入地址];
– 创建一个yy用户,然后授权usage、select,作用范围是全部数据库
create user ‘yy’@’localhost’ identified by ‘123456’;
grant usage,select on *test* to ‘yy’@’localhost’;
– delete权限作用范围在test数据库下面的infos表中
grant delete on test.infos to ‘yy’@’localhost’;
权限详细
全局管理权限
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。
特别的权限
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录–其它什么也不允许做。
权限的收回
注意:必须使用root账户(管理员账户)操作
语法:
REVOKE privilege ON databasename.tablename FROM ‘username’@’host’;
– 收回全部权限
revoke all on . from ‘yy’@’localhost’;
– 收回部分权限
revoke delete on testssm.infos from ‘yy’@’localhost’;
删除用户
语法: DROP USER ‘username’@’host’;