修改初始密码
Linux新安装的MySQL中是没有密码的,所以需要先
为了加强安全性,MySQL5.7为root用户随机生成了一个密码,
在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。
查找新密码位置:登录后 $ select @@log_error;
通过grep "password" /var/log/mysqld.log
命令获取MySQL的临时密码
用该密码登录到服务端后,必须马上修改密码
修改密码命令:ALTER USER USER() IDENTIFIED BY '12345678';
修改密码不成功是设置validate_password_policy 密码复杂度的值
修改指令:set global validate_password_policy=0;
一般测试使用时设置为0(LOW)即可。默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
判断密码的标准就基于密码的长度:select @@validate_password_length;
使用命令修改密码长度:前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。SHOW VARIABLES LIKE 'validate_password%';
设置mysql允许外部IP连接的解决方法
mysql默认情况下,只允许localhost连接,如果需要外部IP连接到mysql,需要向mysql数据库里的“user”表里添加相关授权。
例如:让newuser用户使用newpwd密码从IP:192.168.1.3主机链接到mysql服务器
具体步骤:
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'192.168.1.3' IDENTIFIED BY 'newpwd' WITH GRANT OPTION;
flush privileges;
grant语法:
grant 权限名(所有的权限用all) on 库名(全部).表名(全部) to ‘要授权的用户名’@’%’(%表示所有的IP,可以只些一个IP) identified by “密码”;
身份检查使用user表(Host, User和Password)3个范围列执行。服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接。
在user表Host值的指定方法:
Host值可以是主机名或IP号,或’localhost’指出本地主机。
你可以在Host列值使用通配符字符“%”和“_”。
* Host值’%’匹配任何主机名,空Host值等价于’%’。它们的含义与LIKE操作符的模式匹配操作相同。例如,’%’的Host值与所有主机名匹配,而’%.mysql.com’匹配mysql.com域
的所有主机。
Windows远程登录无密码PC
secpol.msc ->安全设置”>>“本地策略”>>”安全选项“>>账户:使用空白密码的本地账户只允许进行控制台登录”->禁用
数据库管理员
创建用户
-- 新建用户名为iots, 密码是:2183ac6cd59c237b
create user iots identified by '2183ac6cd59c237b';
GRANT ALL PRIVILEGES ON *.* TO 'iots'@'222.173.73.174' IDENTIFIED BY '2183ac6cd59c237b' WITH GRANT OPTION;
此时iots用户还没有任何的权限,默认情况下是这样的。
分配用户权限
-- 同上
grant all on *.* to 'iots'@'%';
回收用户权限
创建数据库语句
-- 创建数据库jpa并指定字符编码及排序规则
CREATE DATABASE IF NOT EXISTS `gaox` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等。如果要授予所的权限则使用 ALL;
-- databasename - 数据库名
-- tablename - 表名
-- 补充:如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*
-- username - 用户名
-- ipaddress - 授权白名单的IP地址列表。如果设为%所有IP都可访问
-- password - 设置用户密码
-- 单独创建用户
CREATE USER gaox @localhost IDENTIFIED BY 'password';
-- 修改用户权限
GRANT ALL privileges ON `iot`.`home` TO 'gaox'@'localhost';
grant all privileges on gaox.* to 'jpauser'@'%' identified by 'password';
-- 刷新数据库
flush privileges;
-- 数据库权限
-- 普通数据用户
查询、插入、更新、删除数据库中所有表数据权限
select, insert, update, delete
-- 数据库开发人员
(创建、修改、删除)表结构、外键、临时表、(创建、查看)索引
create、alter、drop、references、create temporary tables、index
(创建、查看)视图、(创建、修改)存储过程、函数
create view、show view、create routine、alter routine、execute
-- 普通 DBA 管理某个 MySQL 数据库的权限
all [privileges]
-- 作用位置
-- 单个数据表
select on gaoxdb.home
-- 单个数据库
select on gaoxdb.*
-- 整个MySQL服务器,所有库所有表
select on *.*
-- 高级 DBA 管理 MySQL 中 所有数据库的权限
all on *.*
-- 表中的列上
select(id, se, rank) on
-- 查看自己的权限
show grants;
-- 查看其他用户的权限
show grants for gaox@localhost;
撤销已经赋予给 MySQL 用户权限的权限。
grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:
grant all on *.* to gaox@localhost;
revoke all on *.* from gaox@localhost;
如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option”,最后还是让DBA授权给相应用户比较好。
grant select on `iot`.* to gaox@localhost with grant option;
设置与更改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword')
#如果是当前登陆用户
SET PASSWORD = PASSWORD("newpassword");
#例如:
SET PASSWORD FOR 'foo'@'%' = PASSWORD("123456");
update mysql.user set password=password('新密码') where User="phplamp" and Host="localhost";
修改策略
validate_password_number_count指定了密码中数据的长度,
validate_password_special_char_count指定了密码中特殊字符的长度,
validate_password_mixed_case_count指定了密码中大小字母的长度。
这些参数,默认值均为1,所以validate_password_length最小值为4,
如果你显性指定 validate_password_length 的值小于4,尽管不会报错,但 validate_password_length 的值将设为4。
set global validate_password_policy=0;
set global validate_password_length=1;
set global validate_password_mixed_case_count=1;
SHOW VARIABLES LIKE 'validate_password%';
set password = password('root');
update mysql.user set Host='%' where User = 'root';
flush privileges;
授权主机位置IP
@之后的位置
localhost 本机器
% 任何位置主机
‘IP’ 指定IP主机
删除用户
drop user 用户名;
语法:drop user 用户名;
作用:删除已经存在的用户,例如要删除yan这个用户,(drop user yan;)默认删除的是yan@”%”这个用户,如果还有其他用户,例如yan@”localhost”,yan@”ip”,则不会一起被删除。如果只存在一个用户yan@”localhost”,使用语句(drop user yan;)会报错,应该用(drop user yan@”localhost”;)如果不能确定(用户名@机器名)中的机器名,可以在mysql中的user表中进行查找,user列对应的是用户名,host列对应的是机器名。
delete from 用户名;
delete from user where user=”用户名” and host=”localhost”;
delete也是删除用户的方法,例如要删除yan@”localhost”用户,则可以(delete from user where user=”yan” and host=”localhost”;)
注:drop删除掉的用户不仅将user表中的数据删除,还会删除诸如db和其他权限表的内容。而(方法二)只是删除了user表的内容,其他表不会被删除,后期如果命名一个和已删除用户相同的名字,权限就会被继承。