MySQL基础操作----用户操作
一,查询数据库已有的用户
mysql> use mysql; mysql> select user,host from user; +------------------+-----------+ | user | host | +------------------+-----------+ | debian-sys-maint | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+ 4 rows in set (0.00 sec)
可以看到现在有四个user
二,创建用户
命令:mysql> create user 用户名@ 主机 identified by '密码';
@localhost 表示在本地用户
@‘192.168.1.1’ 表示在此服务器才可以登录
@% 表示可以在任何主机登录
create use@localhost ; 表示不需要密码登录
例如:
mysql> mysql> create use@localhost identified by '1234'; Query OK, 0 rows affected (0.00 sec)
现在再查用户
mysql> select user,host from user; +------------------+-----------+ | user | host | +------------------+-----------+ | debian-sys-maint | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | test | localhost | +------------------+-----------+ 5 rows in set (0.00 sec)
三,删除用户
有两种方式
1,drop user 用户名
例如: drop user test@localhost;
2,delete from user where user='用户名' and host ='host信息';
例如:delete from user where user='test' and host='localhost';
drop 仅仅不仅仅是将user表中的数据删除了,还删除了数据库或者其他权限表中的信息,delete只删除了user表中的信息,其他表的信息还是存在,delete删除之后还应该flush privileges。(我觉得drop user username比较好用一些)
四,给用户授权和查询权限
用户的权限分为:全局级权限、数据库级权限、表级别权限、列级别权限、子程序层级权限
查询权限有两种方式
1)show grants for usename@host;
例如:show grants for test@localhost;
2)select * from databasename.tablename where user='username'\G
1 全局权限(mysql.user)
grant privileges on *.* to usename@host identified by 'password';
grant insert,select on *.* to test@localhost identified by '1234'; flush privileges;#授予用户test@localhost 密码是1234,insert和select权限,全局级(应该是所有的数据库和数据表都可以用),
查询权限
select * from mysql.uer where user='test'\G
2数据库级权限
grant privileges on databasename.* to username@host identified by 'password';
grant insert,select on mydatabase.* to test@localhost identified by '1234'; flush privileges; #授权完需要flush一下 # 将mydatabase数据库下的所有表的insert和select权限授予test@localhost用户,用户密码是1234
查询权限
selec * from mysql.db where user='test'\G or show grants for test@localhost;
3 数据表级权限
grant privileges on databasename.tablename to username@host identified by 'password';
grant insert,update on mydatabase.mytable to test@localhost identified by '1234';#(我试过不写host之后的东西也可以) flush privileges; #将mydatabase下mytable这个表的insert、update权力授予test@localhost
查询权限
show grants for test@localhost ; or select * from mysql.tables_priv \G
4 表中列级权限
grant privileges (列名) on databasename.tablename to username@host identified by 'password';
grant insert,update (id,name)on mydatabase.mytable to test@localhost identified by '1234'; flush privileges; #把数据库mydatabase下的数据表mytable下的id和name两列的insert和update功能授予test@localhost。
查询列权限
select * form mysql.columns_priv; or show grants for test@localhost;
5 存储过程、函数级的权限 (这个木有用过,暂时不晓得干嘛用)
grant execute on procedure mydatabase.mytableto 'test'@'localhost' ;
grant execute on function mydatabase.mytable to 'test'@'localhost';
查询权限
select * from mysql.procs_priv where User='test';
6 可以授予的权限
一般常用的权限包括但不仅限于:select,insert,update,delete,create等
授予全部权限用 all privileges,但是privileges可以省略掉,只用all就可以。
7 被授权用户不能授权其他用户
如果想让该用户对其他用户授予相同的授权可以用
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
五,撤销授权
revoke privilege ON databasename.tablename FROM 'username'@'host';
怎样授权就需要怎样撤销,比如
grant insert on *.* to test@localhost identified by '1234';删除授权时需要 revoke insert on *,* test@localhost;
假如 grant select on test.tablename to test@localhost identified by '1234'; 如果要用 revoke insert on *,* test@localhost;撤销命令,则撤销不掉test.talbename下的select授权。
六,创建授权一起做
grant 可以给存在的用户授权,但是如果用户不存在,也可以创建用户并授权,例如;
grant insert,update on *.* to test1@localhost identified by '123'; #创建test1@localhost 并授予全局的insert权限