用户信息
MySQL当中默认有一个名为mysql的数据库。如下:
查看该数据库中的表,可以看到其中有一个名为user的表。如下:
user表中存储的就是MySQL中用户相关的信息。如下:
部分字段说明:
在查看用户信息时为了避免刷屏,可以只选择其中的部分字段进行显示。如下:
需要注意的是,MySQL中可以存在同名的用户,只要这些同名用户对应的登录主机不同即可,因为user表中的主键是复合主键,由表中的user列和host列共同承担。如下:
创建用户
创建用户的SQL如下:
CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';
比如下面创建一个用户名为dragon,并且可以从任意地方登录的用户。如下:
创建用户成功后,该用户的相关信息也就被写入到刚才的user表中了。如下:
这时便可以用新创建的普通用户来连接MySQL服务器了。如下:
此外,由于我们创建的这个用户可以从任意地方登录,因此如果你在Windows下也安装了MySQL,那么就可以在Windows的cmd窗口进行远程登录。如下:
说明一下:
通过show命令查看全局变量,可以看到密码设置相关的要求。如下:
用户自己修改自己的密码
用户可以自己通过调用password函数,将新密码加密后的值设置到自己password当中。如下:
超级用户修改任意用户的密码
超级用户可以通过调用password函数,将新密码加密后的值设置到指定用户的password当中。如下:
删除用户
删除用户的SQL如下:
DROP USER '用户名'@'登录地址';
比如将刚才创建的用户删除后,该用户在user表中对应的记录也就不存在了。如下:
说明一下:
MySQL中的权限
MySQL数据库提供的权限如下:
权限 | 列名 | 上下文 |
---|---|---|
CREATE | Create_priv | 数据库、表或索引 |
DROP | Drop_priv | 数据库或表 |
GRANT OPTION | Grant_priv | 数据库、表或保存的程序 |
REFERENCES | References_priv | 数据库或表 |
ALTER | Alter_priv | 表 |
DELETE | Delete_priv | 表 |
INDEX | Index_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 | 服务器管理 |
需要注意的是,新创建的用户没有任何权限,因此创建用户后需要给用户授权。
给用户授权
给用户授权的SQL如下:
GRANT 权限列表 ON 库名.对象名 TO '用户名'@'登录地址' [IDENTIFIED BY '密码'];
说明一下:
'用户名'@'登录地址'
:表示给哪一个用户授权。库名.对象名
:表示要授予用户哪个数据库下的哪个对象的权限。权限列表
:表示要授予用户何种权限,多个权限之间用逗号隔开。IDENTIFIED BY '密码'
可选:如果用户存在,则在授予权限的同时修改该用户的密码,如果用户不存在,则创建该用户。比如下面创建用户dragon,并授予用户在user_management数据库下所有对象的select权限。如下:
授权后通过show grants for '用户名'@'登录地址'
命令,可以查看该用户现有的权限。如下:
说明一下:
*.*
表示所有数据库的所有对象,库名.*
表示某个数据库的所有对象(表、视图、存储过程等)。此时该用户查看数据库时,就能查看到user_management数据库了。如下:
说明一下:
进入user_management数据库后,也能查看其中的所有表。如下:
但该用户目前只能查看表中的信息,而不能对表中的数据进行修改,因为我们只授予了该用户select权限。如下:
下面将user_management数据库下的所有权限都授予该用户。如下:
这时该用户才可以对表中的数据进行其他操作。如下:
回收权限
回收权限的SQL如下:
REVOKE 权限列表 ON 库名.对象名 FROM '用户名'@'登录地址';
说明一下:
IDENTIFIED BY '密码'
字段。比如下面将dragon用户在user_management数据库下的所有权限回收。如下:
说明一下: