用户
用户信息
MySQL中的用户,都存储在系统数据库mysql的user表中
cpp
mysql> use mysql;
Database changed
mysql> select user,host,authentication_string from user;
+------------------+-----------+------------------------------------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+------------------------------------------------------------------------+
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root | localhost | $A$005$Uk2RPNT<CK-CleN&Qwrt/DhQrY6KBjyRAA2nwKATQM.vGQKPNKTbhcK/Ekam9 |
+------------------+-----------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)
host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
user: 用户名
authentication_string: 用户密码通过password函数加密后的
创建用户
语法:
cpp
create user '用户名'@'登陆主机/ip' identified by '密码';
例子:
cpp
mysql> create user 'syb'@'localhost' identified by 'syb020913';
Query OK, 0 rows affected (0.02 sec)
mysql> select user,host,authentication_string from user;
+------------------+-----------+------------------------------------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+------------------------------------------------------------------------+
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root | localhost | $A$005$Uk2RPNT<CK-CleN&Qwrt/DhQrY6KBjyRAA2nwKATQM.vGQKPNKTbhcK/Ekam9 |
| syb | localhost | $A$005${k]rdWr#4}IpC`a014URsNINFfgGToOHXiJ7sWpZJZoJUZGCCp4sgO2GQwV2 |--新增用户
+------------------+-----------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)
例子:
cpp
mysql> create user 'sybnet'@'%'; --允许从任意主机登录
Query OK, 0 rows affected (0.00 sec)
删除用户
语法:
cpp
drop user '用户名'@'主机名'
例子:
cpp
mysql> drop user syb;
ERROR 1396 (HY000): Operation DROP USER failed for 'syb'@'%' <= 直接给个用户名,不能删除,它默认是%,表示所有地方可以登陆的用户
mysql> drop user 'syb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
注意:也可以用CURD操作直接删除表中那个用户的所有信息,但是不推荐。
cpp
update user set authentication_string=password('syb123456') where user = 'syb';
修改用户密码
语法:
自己改自己密码
cpp
set password=password('新的密码');
root用户修改指定用户的密码
cpp
set password for '用户名'@'主机名'=password('新的密码');
注意:也可用CURD操作在user中进行修改数据,但是不推荐。
数据库的权限
MySQL数据库提供的权限列表:
| 权限 | 列 | 上下文 |
|---|---|---|
| CREATE | Create_priv | 数据库、表或索引 |
| DROP | Drop_priv | 数据库或表 |
| GRANT OPTION | Grant_priv | 数据库、表或保存的程序 |
| REFERENCES | References_priv | 数据库或表 |
| ALTER | Alter_priv | 表 |
| DELETE | Delete_priv | 表 |
| INDEX | Index_priv | 表 |
| INSERT | Insert_priv | 表 |
| SELECT | Select_priv | 表 |
| UPDATE | Update_priv | 表 |
| CREATE VIEW | Create_view_priv | 视图 |
| SHOW VIEW | Show_view_priv | 视图 |
| ALTER ROUTINE | Alter_routine_priv | 保存的程序 |
| CREATE ROUTINE | Create_routine_priv | 保存的程序 |
| EXECUTE | Execute_priv | 保存的程序 |
| FILE | File_priv | 服务器主机上的文件访问 |
| CREATE TEMPORARY TABLES | Create_tmp_table_priv | 服务器管理 |
| LOCK TABLES | Lock_tables_priv | 服务器管理 |
| CREATE USER | Create_user_priv | 服务器管理 |
| PROCESS | Process_priv | 服务器管理 |
| RELOAD | Reload_priv | 服务器管理 |
| REPLICATION CLIENT | Repl_client_priv | 服务器管理 |
| REPLICATION SLAVE | Repl_slave_priv | 服务器管理 |
| SHOW DATABASES | Show_db_priv | 服务器管理 |
| SHUTDOWN | Shutdown_priv | 服务器管理 |
| SUPER | Super_priv | 服务器管理 |
给用户授权
刚创建的用户没有任何权限。需要给用户授权。
语法:
cpp
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
- 权限列表,多个权限用逗号分开
cpp
grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
- *.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
- 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
- identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
例子:
cpp
--root用户
--在root用户中创建一个数据库,并创建一个表,插入数据
mysql> create database rootdb;
Query OK, 1 row affected (0.10 sec)
mysql> use rootdb
Database changed
mysql> create table user(
-> id int primary key,
-> name varchar(20) not null
-> );
Query OK, 0 rows affected (0.13 sec)
mysql> insert into user values (1,'张三');
Query OK, 1 row affected (0.02 sec)
mysql> insert into user values (2,'李四');
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
| 2 | 李四 |
+----+--------+
2 rows in set (0.00 sec)
cpp
--切换到syb用户
mysql> show databases;--数据库与root用户不一样
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.00 sec)
mysql> use rootdb;--不允许访问root用户的rootdb数据库,权限不够!
ERROR 1044 (42000): Access denied for user 'syb'@'localhost' to database 'rootdb'
cpp
--root用户
mysql> grant select on rootdb.user to 'syb'@'localhost';--赋予syb用户select权限
Query OK, 0 rows affected (0.01 sec)
cpp
--mysql用户
--这时查看databases,出现rootdb数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| rootdb |
+--------------------+
3 rows in set (0.00 sec)
mysql> use rootdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
--查看数据
mysql> select * from user;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
| 2 | 李四 |
+----+--------+
2 rows in set (0.00 sec)
--插入数据
mysql> insert into user values (3,'张飞');
ERROR 1142 (42000): INSERT command denied to user 'syb'@'localhost' for table 'user'--权限不够,不能插入
查看特定用户现有的权限
cpp
mysql> show grants for 'syb'@'localhost';
+------------------------------------------------------+
| Grants for syb@localhost |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO `syb`@`localhost` |
| GRANT SELECT ON `rootdb`.`user` TO `syb`@`localhost` |
+------------------------------------------------------+
2 rows in set (0.00 sec)
回收权限
语法:
cpp
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
cpp
--root用户
mysql> revoke select on rootdb.user from 'syb'@'localhost';--回收syb对数据库rootdb中表user查看权限
Query OK, 0 rows affected (0.01 sec)
cpp
--syb用户
mysql> select * from user;
ERROR 1142 (42000): SELECT command denied to user 'syb'@'localhost' for table 'user'--权限被移除
注意:如果发现赋权限后,没有生效,执行如下指令:
cpp
flush privileges;