用户
用户信息
MySQL中对用户作管理,就要记录下来那些用户是允许能够使用MySQL的,所以MySQL中的信息也是在MySQL特定的表内当中被保存的,这个表就是user表,而这个表存放在mysql数据库当中的,这个mysql数据库是我们下载MySQL的时候就给我们安装好的。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql | ---这个就是存放用户信息的数据库
| oracle_9i_test |
| performance_schema |
| sys |
| test_db |
+--------------------+
6 rows in set (0.00 sec)
mysql> use mysql;
mysql> show tables;
+------------------------------------------------------+
| Tables_in_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
………………
| user | ---这个就是存放用户信息的表
+------------------------------------------------------+
38 rows in set (0.00 sec)
mysql> select host,user,authentication_string from user;
+-----------+------------------+------------------------------------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
!D\MaZZlE1JXdWECPE/CdbM6nGurPyuDxQMgHws/UAcZTz7C | --- 这个是root的账号,8.0的做了特殊处理 需查看全部才能显示select * from user \G
+-----------+------------------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)
字段解释:
- host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
- user: 用户名
- authentication_string: 用户密码通过函数加密后的
- *_priv: 用户拥有的权限
创建用户
语法:
create user '用户名'@'登陆主机/ip' identified by '密码';
案例:
mysql> create user 'chuyang'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.02 sec)
mysql> select host,user,authentication_string from user;
+-----------+------------------+------------------------------------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | chuyang | $A$005$`_Oh-(;he5S5^/pmm(Oc4h83U4NjtslihTdDntqBpcRaY/Xft7CZbz3KW6amQ4 |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
!D\MaZZlE1JXdWECPE/CdbM6nGurPyuDxQMgHws/UAcZTz7C |
+-----------+------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)
因为上面我们创建的chuyang账号的host是localhost所以只能在本地登陆,并不能进行远程登陆,如果要支持远程登陆,就需要加上具体的主机ip。
mysql> create user 'qfw'@'%' identified by '123456'; --- % 表示匹配任何主机
删除用户
语法:
drop user '用户名'@'主机名';
修改用户密码
- 使用alter修改秘密
ALTER USER语句是MySQL8.0及以上版本中用于更改用户密码的语句。具体语法格式如下
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';
mysql> alter user 'chuyang'@'localhost' identified by '654321';
Query OK, 0 rows affected (0.01 sec)
- 使用set修改密码
SET PASSWORD语句是MySQL5.7及以下版本用于更改用户密码的语句。具体语法格式如下
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
- 使用update修改密码
UPDATE语句可以通过直接更改MySQL系统表来更改用户密码。此方法可以应用于任何版本的 MySQL。具体语法格式如下:
UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='用户名' AND Host='主机名';
以上修改操会将 test 的用户名和连接主机为 localhost 的 MySQL 用户的密码修改为 newpassword。需要注意的是,更改mysql.user表中的数据后,需要通过以下命令刷新MySQL权限信息:
flush privileges;
数据库的权限
MySQL数据库提供的权限列表:
给用户权限
刚刚创建的用户是没有任何权限的,需要给用户赋值权限
语法:
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'];
说明:
- 权限列表,多个权限用逗号分开
grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
*.*
: 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)库.*
: 表示某个数据库中的所有数据对象(表,视图,存储过程等)identified by可选
: 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
案例:
查看特定用户所拥有的权限
语法:
show grants for '用户名'@'登陆位置';
mysql> show grants for 'chuyang'@'%';
+-------------------------------------------------------------+
| Grants for chuyang@% |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO `chuyang`@`%` |
| GRANT ALL PRIVILEGES ON `oracle_9i_test`.* TO `chuyang`@`%` |
+-------------------------------------------------------------+
2 rows in set (0.00 sec)
回收权限
语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
mysql> revoke delete,insert on oracle_9i_test.* from 'chuyang'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for 'chuyang'@'%';
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for chuyang@% |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `chuyang`@`%` |
| GRANT SELECT, UPDATE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `oracle_9i_test`.* TO `chuyang`@`%` |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)