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是不能用的,因为没有权限。
CREATE USER语句创建
只是创建账户,没有授权的操作,非常简单
mysql> create user guorui; 写个用户名,完事
mysql>select * from msyql.user\G
账户创建完了,找到user表,去看一下它有什么权限,登录进去之后没有任何权限,也没有密码。只能登录,啥也干不了。
这里没定义它从哪台机器登录,它写的是%号。 %表示的是所有的机器,但是有些版本赋值%号,在本地也不能登录。那是正常情况。
注意: mysql8.0的%包含localhost和127.0.0.1
碰见不包含的单独的做localhost或者127.0.0.1授权就行
测一下它能不能登录
没有密码,直接回车就进去了
用localhost也行
从远程登录,但是什么都干不了
稍微复杂一点,可以指定用户从哪台机器登录,它的密码是什么,但是没有对某个库,某个表的授权,那些授权还是要通过grant授权的。
mysql> create user fangchao identified by '123';
这个和grant不一样,grant创建了一次还可以创建,它是一个授权权限,在账户已经存在的情况下,他不会再次给你创建账户了,create是一个纯纯的创建账户的命令。所以再创建肯定不能重名。
fangchao用户创建了,但是还是没有权限,现在给它授权,(只想让他看到db1库里的t1表的东西)
重新拿fangchao用户登录一下,
只能看到db1库里的t1表的东西,不能操作。
在公司开发人员的用数据库是我给账户,不能直接给root账户,给普通账户,这个普通账户能干什么,我说了算,它提需求,我授权。
连授权带创建账户,可以用这条命令进行授权,我授权的账户如果不存在,就给它创建,如果存在那就是授权。
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;
drop user 'user1'@’localhost’; 后面跟用户,最好指定一下用户从哪台机器登录
mysql>select * from msyql.user\G 查看系统里的用户
Host 指定从哪台机器可以登录我,这里没写的,都不可以。在删除账户的时候最后指定一下删除哪个
账户的添加,实际上就是给user表里添加了一条记录,系统表也可以用root账户改,相当于删一条记录
mysql>delete from mysql.user where user='fangchao' and host='192.168.26.12';
在检查一下,发现192.168.26.12的消失了。剩下11和%
mysql>flush privileges; 凡是直接修改表的操作必须刷新,不然可能不会立即生效。
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专门搞了一个设置密码的方法。(新的版本直接给删掉了)类似于在操作系统自己改自己的密码
如果版本低直接这样设置密码,它是不会自动给你做加密操作的。密码都加了密了。得手动加密,所以得用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平时用起来感觉不出来,差别并不是特别的大。
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!@';
关闭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 -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
本地登陆,端口不生效,任何端口都可以,远程登陆必须使用改过的端口