MySQL创建用户添加权限

Posted 没刮胡子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL创建用户添加权限相关的知识,希望对你有一定的参考价值。

新建用户

格式:

create user “username”@“host” identified by “password”;

示例:

create user "ts"@"localhost" identified by "ts"

创建数据库

create database tsdb default charset UTF8;

赋予用户权限

格式:

grant privileges on databasename.tablename to ‘username’@‘host’ IDENTIFIED BY ‘PASSWORD’;

示例

grant all privileges on ` tsdb`.* to ts@'localhost';

刷新权限

flush privileges;

1. GRANT 命令说明:

priveleges(权限列表),可以是all priveleges, 表示所有权限,也可以是 select、update 等权限,多个权限的名词,相互之间用逗号分开。
on 用来指定权限针对哪些库和表。

*.*中前面的号用来指定数据库名,后面的号用来指定表名。

to表示将权限赋予某个用户, 如 jack@‘localhost’ 表示 jack 用户,@后面接限制的主机,可以是 IP、IP 段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost 的用户就可以了。

identified by 指定用户的登录密码,该项可以省略。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定 WITH GRANT OPTION 选项导致后来该用户不能使用GRANT 命令创建用户或者给其它用户授权。
备注:可以使用 GRANT 重复给用户添加权限,权限叠加,比如你先给用户添加一个 select权限,然后又给用户添加一个 insert 权限,那么该用户就同时拥有了 select 和 insert 权限。

2.授权原则说明:

权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
a、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给 select权限就可以了,不要给用户赋予updateinsert 或者 delete 权限。
b、创建用户的时候限制用户的登录主机,一般是限制成指定 IP 或者内网 IP 段。
c、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
d、为每个用户设置满足密码复杂度的密码。
e、定期清理不需要的用户。回收权限或者删除用户。

示例:

/*授予用户通过外网 IP 对于该数据库的全部权限*/
grant all privileges on `test`.* to 'test'@'%' ;
/*授予用户在本地服务器对该数据库的全部权限*/
grant all privileges on `test`.* to 'test'@'localhost';
grant select on test.* to 'user1'@'localhost'; /*给予查询权限*/
grant insert on test.* to 'user1'@'localhost'; /*添加插入权限*/
grant delete on test.* to 'user1'@'localhost'; /*添加删除权限*/
grant update on test.* to 'user1'@'localhost'; /*添加权限*/
flush privileges; /*刷新权限*/

3 查看权限

show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

4 查看某个用户的权限:

show grants for 'jack'@'%';
+--------------------------------------------------------------+
| Grants for jack@%
|
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jack'@'%' IDENTIFIED BY PASSWORD
'*9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0' |
+--------------------------------------------------------------------------+
1 row in set (0.00 sec)

5 删除权限

revoke privileges on databasename.tablename from 'username'@'host';
revoke delete on test.* from 'jack'@'localhost';
revoke all privileges on ` bbs`.* from bbs@'localhost';

6 更改用户名

mysql> rename user 'jack'@'%' to 'jim'@'%';

7 修改密码

本地直接输入 mysql 进入控制台
1.用 set password 命令

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
Query OK, 0 rows affected (0.00 sec)

2.用 mysqladmin

 [root@rhel5 ~]# mysqladmin -uroot -p123456 password 1234abcd

备注: 格式:mysqladmin -u 用户名 -p 旧密码 password 新密码

8 MySQL 忘记密码

1、修改配置文件

vim /etc/my.cnf

在里面添加一行

skip-grant-tables

2、重新启动 mysql

systemctl restart mysql

然后使用命令进入

mysql -u root

可以发现直接登录了

3、修改密码

update mysql.user set password=password('123456') where host='localhost' and user='root';

然后修改/etc/my.cnf 文件,注释掉#skip-grant-tables,再次重新启动 mysql

以上是关于MySQL创建用户添加权限的主要内容,如果未能解决你的问题,请参考以下文章

MySQL8.0添加用户和权限

MySQL创建用户添加权限

MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限

MySQL用户创建登录等(超详细)

如何设置mysql用户的权限

MySQL创建用户并设置权限