MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中。
存储账户权限信息表主要有:user、db、tables_priv、columns_priv、procs_priv。
常用的如下:
user表:
user表示 Mysql 中最重要的一个权限表,记录允许连接到服务器的账号信息,里面的权限是全局级的。
db表:
db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。
tables_priv表:
tables_prive表用来对表设置操作权限。
columns_prive表:
columns_prive表用来对表的某一列设置权限。
账户管理:
登录和退出 Mysql 服务器:
在命令行中执行:
mysql -h主机地址 -u用户名 -p
注:登录服务器,同时执行一条查询语句
mysql -uroot -p -hlocalhost test_db -e '查询语句'
新建普通用户:
使用 CREATE USER 语句创建新用户:
执行 create user 语句时, 服务器会修改相应的用户授权表,添加或者修改用户及其权限
create user 语句的基本语法如下:
CREATE USER '用户名'@'host' IDENTIFIED BY '密码' # 创建带密码的用户
CREATE USER '用户名'@'host' # 创建不带密码的用户
CREATE USER 语句 会添加一个新的 mysql 账户 。 使用 CREATE USER 语句用户,必须拥有全局的 CREATE USER 权限或 MySQL 数据库的 INSERT 权限, 每添加一个用户, CREATE USER 语句会在 mysql.user 表中添加一条新记录,但是新创建的账户没有任何权限。
使用哈希值设置密码:
CREATE USER '用户名'@'host' IDENTIFIED BY PASSWORD '密码的散列值' 创建的用户无权限
步骤:
1、获取密码的哈希散列值 password() 函数
select password('密码')
2、CREATE USER 'username' @'host' INSENTIFIED BY PASSWORD '哈希值'
使用 GRANT 语句 创建新用户
使用 GRANT 语句创建新用户时必须有 GRANT 权限。GRANT 语句是添加新用户并授权他们访问 MySQL 对象的首选方法。GRANT 语句会自动将密码加密后存入表。
GRANT 语句的基本格式:
GRANT 权限 ON dbname.tbname TO 'username' @ 'host' INDENTIFIED BY 'password' WITH GRANT OPTION
WITH GRANT OPTION 为可选项,表示对新用户赋予 GRANT 权限。
直接操作 MySQL 用户表(不推荐):
使用 INSERT 语句向mysql.user表中插入一条新的数据
添加成功后, 还需要执行 FLUSH PRIVILEGES 告诉服务器重新加载授权表。
删除普通用户:
使用 DROP USER 语句删除用户
DROP USER 语法格式:
DROP USER 'username' @ 'host'; 删除单个用户
DROP USER; 删除来自所有授权表的账户权限记录
使用 DROP USER ,必须拥有 MySQL 数据库的全局 CREATE USER 权限 或 DELETE 权限。
使用 DELETE 语句删除用户
基本语法:
DELETE FROM MySQL.user WHERE host='hostname' and user='username';
root 用户修改自己的密码
使用mysqladmin 命令在命令行指定新的密码
基本语法:
mysqladmin -u username -h localhost -p password "newpwd"
注:1、我使用这个命令修改密码的时候有警告,暂时不知道怎么解决。(不影响命令执行)
2、如果密码用单引号括起来会报错,命令执行失败,密码修改失败。
使用 SET 语句修改 root/普通 用户的密码:
语法格式:
SET PASSWORD=password("newpwd");
新密码必须使用 password()函数加密
root 用户修改普通用户密码
使用 SET 语句修改普通用户的密码
基本语法:
SET PASSWORD FOR 'username' @ 'hostname' = password('newpwd');
使用 GRANT 语句修改普通用户的密码
基本语法:
GRANT USAGE ON *.* TO 'username'@'hostname' INDENTIFIED BY "newpwd";
权限管理:
授权
全局层级
GRANT ALL ON *.*(*.*表示所有) 和 REVOKE ALL ON *.*(*.*表示所有) 指授予和撤销全局权限
数据库层级
GRANT ALL ON db_name 和 REVOKE ALL ON db_name 指授予和撤销数据库权限
表层级
GRANT ALL ON db_name.tb_name 和 REVOKE ALL ON db_name.tb_name 指授予和撤销表权限
列层级
收回权限
在将用户账户从 user 表删除之前,应该收回相应用户的所有权限。
收回用户的所有权限。
基本格式:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host' [,'user'@'host'];
收回指定的权限
基本格式:
REVOKE 权限类型 ON table1, table2,tabel3..... FROM 'user'@'host' [,'user'@'host'];
查看权限
基本格式:
SHOW GRANTS FOR 'user'@'host' ;