Mysql用户管理

1登录和退出MySQL

mysql -h 192.168.5.240 -P 3306 -u root -p123 mysql -e "select user,host from user"

端口默认是3306不用指定,如果服务器端口改掉了,用-P指定。第二个msyql是远程执行,进去之后进去哪个库,-e执行哪条命令。其实不用在这写库,可以在表的前面加库。

-h 指定主机名 【默认为localhost】 

-P MySQL服务器端口 【默认3306】 

-u 指定用户名 【默认root】

-p 指定登录密码 【默认为空密码】

-e 接SQL语句

如果忘了这些参数--help查一下

系统里用户是用来做权限控制的。mysql里用户也是做权限控制的。不光msyql,在其他任何一个软件里碰到的用户都是权限控制。平时登录app,注册游戏账号,人家是超级会员,你是普通用户。权限就不一样。

一般情况在公司里,会ssh远程登录到机器,用这台机器本地的客户端去做一个本地登录就行了,用不着做远程登陆,可以做远程登陆,想做远程登录可以-h,现在默认情况下是登录不了的,从本地登录可以,在另外一台机器登录。

 不允许被连接,默认情况下-h是不能用的,因为没有权限。

2创建用户

方法一:

CREATE USER语句创建

只是创建账户,没有授权的操作,非常简单

mysql> create user guorui;   写个用户名,完事Mysql用户管理_第1张图片

mysql>select * from msyql.user\G 

 账户创建完了,找到user表,去看一下它有什么权限,登录进去之后没有任何权限,也没有密码。只能登录,啥也干不了。

Mysql用户管理_第2张图片

这里没定义它从哪台机器登录,它写的是%号。 %表示的是所有的机器,但是有些版本赋值%号,在本地也不能登录。那是正常情况。

注意: mysql8.0的%包含localhost和127.0.0.1

碰见不包含的单独的做localhost或者127.0.0.1授权就行

测一下它能不能登录

没有密码,直接回车就进去了

用localhost也行

 从远程登录,但是什么都干不了

 Mysql用户管理_第3张图片

 再创建一个账户

稍微复杂一点,可以指定用户从哪台机器登录,它的密码是什么,但是没有对某个库,某个表的授权,那些授权还是要通过grant授权的。

mysql> create user fangchao identified by '123';

5.5不用特别复杂的密码,5.7才用复杂密码 

 这个和grant不一样,grant创建了一次还可以创建,它是一个授权权限,在账户已经存在的情况下,他不会再次给你创建账户了,create是一个纯纯的创建账户的命令。所以再创建肯定不能重名。

fangchao用户创建了,但是还是没有权限,现在给它授权,(只想让他看到db1库里的t1表的东西)

 重新拿fangchao用户登录一下,

Mysql用户管理_第4张图片 Mysql用户管理_第5张图片Mysql用户管理_第6张图片

只能看到db1库里的t1表的东西,不能操作。

在公司开发人员的用数据库是我给账户,不能直接给root账户,给普通账户,这个普通账户能干什么,我说了算,它提需求,我授权。

方法二:

GRANT语句创建   

连授权带创建账户,可以用这条命令进行授权,我授权的账户如果不存在,就给它创建,如果存在那就是授权。

mysql> grant all on *.* to 'user3'@'localhost' identified by '123456' ;

grant 是授权指令,老版本的mysql经常用它创建账户    all(指所有的权限除了授权权限)on *.* to  第一个*代表所有的库   .(哪个库里的)  第二个*(表名)*.*指的是所有库里的所有表   to(授权给哪个账户) 标准写法用户写引号,单引双引都行   @标准的语法   localhost授权给哪台机器,   如果直接回车就没有密码     identified by(关键字)设置密码随便写

mysql>flush privileges;  当手动更新权限表的时候需要刷新权限,

mysql>select * from msyql.user\G  查看系统里的用户

在工作当中,碰见哪个数据库连不上去,先看看有没有权限,要不就是防火墙。生产环境为了作测试不要这么玩, ssh 192.168.26.12到机器里,在这直接mysql,直接在本地,这样就不用授权了,但是你肯定要给开发做授权的。

例如;一台php机器  一台mysql机器

php和mysql有可能在一台机器上,那就不用做授权,要是在不同的机器,先要在MySQL里创建一个账户,做一个远程登录的授权,这样的话php才能通过ip地址和密码连上你的机器,不然连不上。

之前设置的各种密码是没有有效期的,不太安全,如果公司对安全性要求比较高,可以把密码的有效期设置一下。

mysql> CREATE USER 'jeffrey'@'localhost'

IDENTIFIED WITH sha256_password BY 'new_password'

PASSWORD EXPIRE INTERVAL 180 DAY;

3删除用户

方法一:DROP USER语句删除

drop user 'user1'@’localhost’;     后面跟用户,最好指定一下用户从哪台机器登录

mysql>select * from msyql.user\G  查看系统里的用户

Host 指定从哪台机器可以登录我,这里没写的,都不可以。在删除账户的时候最后指定一下删除哪个

方法二:DELETE语句删除

账户的添加,实际上就是给user表里添加了一条记录,系统表也可以用root账户改,相当于删一条记录

mysql>delete from mysql.user where user='fangchao' and host='192.168.26.12';

 在检查一下,发现192.168.26.12的消失了。剩下11和%

 mysql>flush privileges; 凡是直接修改表的操作必须刷新,不然可能不会立即生效。

4修改用户密码

root修改自己密码

方法一

# mysqladmin -u root -p'123' password 'new_password'    123为旧密码

方法二

mysql> update mysql.user set authentication_string=password('Helloworld123!') where user='root' and host='localhost';  直接修改表的内容,其实就是更新

不介意用这种,很容易出错,但是丢了密码之后就有用。

如果方法二不能用,使用下面方法:

MariaDB [(none)]> update mysql.user set password=password('Helloworld123!') where user='root' and host='localhost';

因为版本的原因,5.7的版本更新的是authentication_string字段,5.7之前的版本(5.5)更新的是password字段

方法三:

set password=password(‘new_password’);  是mysql专门搞了一个设置密码的方法。(新的版本直接给删掉了)类似于在操作系统自己改自己的密码

Mysql用户管理_第7张图片

 如果版本低直接这样设置密码,它是不会自动给你做加密操作的。密码都加了密了。得手动加密,所以得用password函数给它做个加密,如果是5.7就可以。

 上面方法将会在后面的版本remove,使用下面方法

set password='new_password';       

 mysql>select * from msyql.user\G   看看密码有没有被加密

5.7的版本显示的是authentication_string字段,5.5显示的是password字段,5.5和5.7平时用起来感觉不出来,差别并不是特别的大。

root修改其他用户密码

方法一:

mysql> SET PASSWORD FOR user3@’localhost’=password(‘new_password’);

上面的方法会在将来remove,使用下面的方法:

mysql> SET PASSWORD FOR user3@’localhost’='new_password';

方法二:

UPDATE mysql.user SET authentication_string=password(‘new_password’)

WHERE user=’user3’ AND host=’localhost’;

方法三:

# mysqladmin -u ll -p'123' password 'new_password'    123为旧密码  ll是普通用户

这个能实现所有改密码的操作

普通用户修改自己密码

mysql> SET password=password('new_password');

mysql> alter user 'll'@'localhost' identified by 'Helloworld123!@';

root账户没了或者root密码丢失:

关闭Mysql使用下面方式进入Mysql直接修改表权限

5.1/5.5版本 :

# mysqld_safe --skip-grant-tables --user=mysql &

5.6/5.7版本:

# mysqld --skip-grant-tables --user=mysql &

# mysql -uroot

mysql> update mysql.user set authentication_string=password('Helloworld123!') where user='root' and host='localhost';  修改表里的字段, 把字段的值改成新密码。authentication_string字段里面存储的是密码

mysql>flush privileges; 刷新权限

grep -i pass /var/log/mysqld.log    过滤mysql密码

密码复杂度限制策略:

MySQL5.7默认安装了validate_password插件,若没有安装,则SHOW VARIABLES LIKE 'vali%'则会返回空。只要把这个插件干掉,它就支持弱密码,默认情况不支持弱密码。

关闭validate_password插件:

vim /etc/my.cnf 配置文件中加入以下并重启mysqld即可:

[mysqld]

validate_password=off   

只要把这里改成off 5.7也可以用设置简单密码,甚至可以不设密码。如果不改5.7只能用复杂密码,简单密码它不让用。

vim /etc/my.cnf    找到msyqld

Mysql用户管理_第8张图片

 保存,重启服务,再设置密码

或者不想设置密码

登进去了

 

远程登陆:

#mysql -u tom -p123 -h 10.18.44.196 -P 3307   (如果端口改掉了要加-P)

vim /etc/my.cnf 改端口     把prot=3307 加在这个配置文件里

 本地的不行,给授权一个远程账户 grant all on *.* to ‘tom’@'%' identified by ‘123';

远程登陆 mysql -utom -p'123' -h 192.168.26.11 -P 3307

Mysql用户管理_第9张图片

本地登陆,端口不生效,任何端口都可以,远程登陆必须使用改过的端口

你可能感兴趣的:(linux,运维,服务器)