我们知道,SQL语言按照功能用途分为4类,分别是DDL、DML、DQL和DCL。其中,DCL是数据控制语言,主要用于管理用户和权限。在企业中,这部分工作通常是由DBA完成,一般开发人员很少接触。
DCL主要能做什么?
- 创建用户
- 删除用户
- 修改密码
- 给用户赋予权限
- 撤销用户权限
Mysql的权限体系大致分为5个层级,全局层级、数据库层级、表层级、列层级和子程序层级
层级 | 描述 |
---|---|
全局层级 | 适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。 |
数据库层级 | 适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。 |
表层级 | 适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。 |
列层级 | 适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。 |
子程序层级 | CREATE ROUTINE,ALTER ROUTINE,EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。 |
Mysql的权限信息主要存储在以下几张表中,当用户连接数据库时,Mysql会根据这些表对用户进行权限验证。
表名 | 描述 |
---|---|
user | 用户权限表,记录账号、密码及全局性权限信息 |
db | 记录数据库相关权限 |
table_priv | 用户对某个表拥有的权限 |
column_priv | 用户对某表的某个列所拥有的权限 |
procs_priv | 用户对存储过程及存储函数的操作权限 |
用户管理
在Mysql中,使用CREATE USER来创建用户,用户创建后没有任何权限。
创建用户
CREATE USER '用户名' [@'主机名'][IDENTIFIED BY '密码'];
注意:Mysql的用户账号由两部分组成:用户名和主机名,即用户名@主机名&#