mysqly用户与权限管理

mysql的连接行为

当全新的mysql数据库安装完毕后,系统就为我们默认的创建了几个用户:管理员用户root以及匿名用户(5.7之前),通过查看名为mysql的系统数据库中的user表,可以看到所有的用户名以及全局权限。

5.7

Host    	user
%	        root
localhost	root
localhost	mysql.session
localhost	mysql.sys

8.0

Host    	user
%	        root
localhost	root
localhost	mysql.session
localhost	mysql.sys
localhost	mysql.infoschema

可见,有两个名为root的用户,他们分别被允许从主机localhost和任意主机‘%’连接到mysql服务器。
127.0.0.1和localhost连接的区别:
mysql -h 127.0.0.1的时候,使用TCP/IP连接,mysql server认为该连接来自于127.0.0.1或者 localhost.localdomain.
mysql -h localhost的时候,是使用unix socket;此时mysql server则认为该client是来自localhost。
按照权限的授予级别,可分为以下几类:
全局权限Global Privileges:他是管理权限,应用到服务器上的所有数据库上。要授予全局权限,使用

ON *.*

的语法。mysql把全局权限保存在mysql.user表中。
**数据库权限Database Privileges:**应用到某个特定数据库的所有对象上。要授予数据库权限,使用 ON db_name.*的语法。mysql把数据库权限保存在mysql.db表中。
表权限Table Priviledges :应用到某个特定表的所有列上。要授予表权限,使用ON db_name.tbl_name的语法。mysql把表权限保存在mysql.tables_priv表中。
列权限:应用到某个特定表的单个列上。要授予列权限,必须在权限名称后面跟小括号,其中协商列名。mysql把列权限保存在mysql.columns_prv表中
存储过程权限:应用到存储过程和函数上。mysql把存储过程权限保存在mysql.proc_priv表中。
代理用户权限:使用一个用户称为另一个用户的代理。mysql把代理用户权限保存在mysql.proxies_priv表中(5.7后已经不再支持)
权限表的存取过程是:
1)先从user表中的host,user,password这3个字段中判断连接的IP,用户名,密码是否存在表中,存在则通过身份验证;
2)通过权限验证,进行权限分配时,按照user>db>tables_priv>columns_priv的顺序进行分配。
即先检查全局权限表 user,如果user中对应的权限为Y,则此用户对所有的数据库的权限都为Y,将不再检查db,tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推
mysql套接字

vi /etc/rc.d/rc.local
在文件中添加
rm -rf /tmp/mysql.sock
ln -s /data/mysql_data/mysql.sock		/tmp/mysql.sock

mysql创建用户

第一种 create user语句
CREATE USER 这个语句时mysql数据库中标准的创建用户的方式,
CREATE USER ‘用户名’@‘连接行为’ IDENTIFIED BY ‘密码’;

--只允许localhost访问:
CREATE USER 'hive'@'localhost' IDENTIFIED BY '123456';
--只允许192.168.100.10	这台机器访问
CREATE USER 'hive'@'192.168.100.10' IDENTIFIED BY '123456';
--只允许192.168.100.*这个网段访问:
CREATE USE 'hive'@'192.168.100.%' IDENTIFIED BY '123456';
--创建带有密码的用户(这里不限制任何连接行为,说明任何一台机器都能通过hive用户连接到这个数据库上)
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
--创建不带有密码的用户:
CREATE USER 'hive'@'%' IDENTIFIED BY '';
等同于上面不带有密码的用户
CREATE USER 'hive'@'%';

第二种创建用户
授权创建用户法希望大家在root用户下执行。

GRANT ALL PRIVILEGES ON *.* TO  'hive'@'%' IDENTIFIED BY 'hive' WITH GRANT OPTION;
FLUSH PRIVILEGES;

第三种创建用户:
不推荐这种创建用户的方式

INSERT INTO mysql.user(Host,User,authentication_string,ssl_cipher,x509_issuer,x509_subject) VALUES ('%','hive2',PASSWORD('hive2'),'','','');
FLUSH PRIVILEGES;

MYSQL 8.0新特性----密码(身份)验证插件
MYSQL 5.7或之前使用的是:mysql_native_password
MYSQL 8.0开始使用的是:caching_sha2_password
验证连接语句:
select host,user,plugin from mysql.user;
两种密码验证插件的对比:
1)mysql8.0的密码插件使用的是SHA-2哈希机制来转换密码。具体来说,它使用SHA256。而之前使用的SHA-1哈希机制来转换密码。
2)mysql8.0的密码插件生成哈希时,每个密码使用20字节长的盐。由于盐是一个随机数,即使两个用户使用相同的密码,转换过程的最终结果也将不同。而mysql8.0之前的密码插件没有。
3)为了让使用蛮力破解机制更难以尝试和猜测密码,在将密码最终转换结果存储在mysql.user表中之前,对密码和盐进行了5000轮SHA2散列。
盐:在密码学中,是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。

查看密码加密的方式
show  variables like '%password%'

修改用户密码

CREATE USER hive IDENTIFIED BY 'hive';

第一种修改用户密码
以某个用户登陆,然后执行下面语句,修改用户自己的密码,无法修改其他用户的。(只能在mysql5.7中使用)

set password = password('hive1');

第二种修改用户密码

alter user 'hive'@'%' identified by 'hive';

mysqladmin修改密码法:
格式: mysqladmin -u用户名 -p旧密码 password 新密码

mysqladmin -uhive -phive password hive0;

第三种修改用户密码(这种只能时mysql 5.7使用)

use mysql;
UPDATE user SET  authentication_string = password('新密码') where user = 'hive';
FLUSH PRIVILEGES;

mysql5,7的修改语句

UPDATE mysql.user SET authentication_string = password('hive') where user = 'hive';
flush privileges;

MYSQL 8.0不可以使用update语句修改密码。

修改用户名

RENAME USER 旧的用户名 to 新的用户名
注意:修改用户名时,连接方式也是可以修改的。

RENAME USER 'hive1'@'%' to 'hive'@'%';

删除用户

drop user 'hive'@'%';

权限的授予和收回

首先新建一个用户

CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';

查看权限语句:

show grants for 'hive'@'%';

退出root用户或者新开一个窗口,进入到hive用户,查看一下它是否可以访问hr数据库

use hr;
ERROR 1044:Access denied for 'hive'@'%' to database 'hr'

授权(用root用户授权)

--把创建表的权限给hive
grant create on hr.* to hive;
--权限的多重赋予
grant create,alter,drop on hr.* to hive;

收回权限

revoke create on hr.* from hive; --把建表的权限收回

如何拥有实现以及收回建立数据库的权限

grant create on *.* to hive;
revoke create on *.* from hive;

授予以及收回表的访问权限

grant select on hr.* to hive;
grant select,insert,update,delete on hr.* to hive;
revoke select on hr.* from hive;

授予列权限

grant select(name) on hr.emp to hive;

with grant option 权限的级联赋予,或者叫权限的传递

1.登陆到root和hive用户上
2.root用户和hive用户都去执行 use test 这个数据库
3.使用root用户执行 show tables;
4.使用root 用户去建立一些带数据的表,随便建立,保证root用户可以select,但是hive用户不能对这些表有任何权限。
5.尝试使用hive用户去建立hive1用户
create user 'hive1'@'%' identified by 'hive1';
没有权限的话执行
grant create user on *.* to hive;--用root用户执行这条语句
6.验证hive用户可以创建hive1用户后,请把hive1用户删除,我们实验开始
使用root用户对hive用户赋权:
grant select on test.a to hive;
使用hive用户创建hive1用户,并对其赋权
create user hive1 identified by 'hive1';
grant select on test.a to hive1;
此时发现没有办法赋权。
7.使用root用户对hive用户赋权
grant select on test.a to hive with grant option;
8.使用hive用户对hive1用户赋权
grant select on test.a to hive;
--此时执行成功,说明权限已经可以传递了。

收回权限实验:

1.使用root用户从hive用户上收回test.a这张表的select权限。
revoke select on test.a from hive;
2.使用hive再去访问这张表,发现已经访问不了。
3.但是hive1依旧可以访问test.a这张表,说明权限不是级联收回的。

MYSQL中的最高权限:
mysql 5.7安装中出现的:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';--说明在mysql5.7中可以创建用户

mysql 8.0安装中出现的:

grant all privileges on *.* to 'root'@'%';
  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值