设为首页 收藏本站
查看: 524|回复: 0

[经验分享] MySQL数据库中的权限体系

[复制链接]

尚未签到

发表于 2016-9-19 09:01:41 | 显示全部楼层 |阅读模式
MySQL数据库验证权限有3个维度:我是谁、从哪里来、到那里去
哲学家探究人生的终极命题
 
能不能连接:
MySQL数据库中验证用户,需要检查3项值:用户名、用户密码和来源主机。分别对应mysql库中的user表的userpasswordhost三列
 
能不能执行操作:
连接到数据库之后,能不能执行操作,比如说建库、建表、改表、查询或修改数据等,除了mysql.user外,还有mysql.dbmysql.tables_privmysql.columns_privmysql.proc_priv
 
权限变更何时生效:
如果是通过GRANTREVOKESET PASSWORDRENAME USERMySQL提供的命令执行修改,那么权限将马上生效
如果是手动修改字典表方式(INSERTUPDATEDELETE)达到变更用户权限的目的,要重启MySQL服务才能生效
 
创建用户:
MySQL对用户名和密码是大小写敏感的
(system@localhost) [mysql]> create user jss;
(system@localhost) [mysql]> select user,host,password from mysql.user where user='hugc';
如果user字典表中的host列值为空或%,均代表任意主机
 
MySQL数据库中,用户和主机(‘user’@’host’)组成一个唯一账户
(system@localhost) [mysql]> create user hugc@’192.168.1.201’ identified by ‘hugc’;
(system@localhost) [mysql]> create user hugc@’192.168.1.%’ identified by ‘hugc’;
 
修改用户密码:
(hugc@localhost) [(none)]> set password for jss=password('hugc');
 
将用户密码设置为过期:
(system@localhost) [mysql]> alter user hugc password expire;
 
GRANT方式创建用户:
(system@localhost) [mysql]> grant select on test.* to hugc_test@’192.168.1.201’ identified by ‘hugc’;
(system@localhost) [mysql]> select user,host,password from mysql.user;
 
修改数据字典方式创建用户:
(system@localhost) [mysql]> insert into mysql.user (host,user,password) values (‘192.168.1.201’,’test_test’,password(‘123456’));
(system@localhost) [mysql]> update mysql.user set password=password(‘1234567’) where user=’test_test’;
 
授予权限:
priv_type
object_type
priv_level
ssl_option
with_option
(system@localhost) [mysql]> grant select on mysql.user to hugc;
 
查看用户权限:
(system@localhost) [mysql]> show grants for hugc;
 
收回用户权限:
(system@localhost) [mysql]> revoke select on mysql.user from hugc;
MySQL数据库中的权限,操作时授予和收回是的权限级别(priv_level)必须对应,否则无法成功回收
(system@localhost) [mysql]> show grants for hugc;
收回用户所有权限,不管授予用户的是什么权限级别,什么对象的什么权限,直接将用户恢复至裸身(USAGE)状态
(system@localhost) [mysql]> revoke all,grant option from hugc;
(system@localhost) [mysql]> show grants for hugc;
USAGE权限意指没有权限(no privileges),这个权限用户一经创建就会拥有,并且无法通过REVOKE语句收回
 
删除用户:
(system@localhost) [mysql]> drop user hugc;
MySQL数据库中的对象保存并不是依赖于用户,而是依赖于库(database),用户被删除没有任何关系,对象仍在,好好的保存在存储它的数据库中
 
权限级别:
MySQL数据库权限从大的粒度可以分为5类:全局、数据库、表、列、程序。可以精确的为某个用户分配从某台机器连接进来访问某个数据库下某个表的某个列的某部分记录权限。
 
全局权限:
与全局权限相关的权限信息记在mysql.user表中
(system@localhost) [mysql]> grant create on *.* to hugc;
授予了在任何库下创建任何对象的权限,没有select权限,没有update权限,没有delete权限
(system@localhost) [mysql]> select * from mysql.user where user=’ hugc’;
 
数据库级别权限:
主要用于控制账户(‘user’@’host’)操作某个数据库的权限,数据库级别的权限信息记录在mysql.db表中
(system@localhost) [mysql]> grant create on hugcdb.* to hugc;
(system@localhost) [mysql]> select * from mysql.db where user=’ hugc’;
进行验证
(jss@localhost) [mysql]>show databases;
 
并不存在的information_schema库,用户不能对information_schema数据中的对象做授权。这个数据库及库中的对象全是由MySQL自动维护的一系列虚拟对象
 
表级权限:
表对象的授权信息保存在mysql.tables_priv字典表中
(system@localhost) [mysql]> grant all on hugcdb.users to hugc;
 
列级权限:
MySQL权限体系中的最细粒度,保存在mysql.columns_priv,属于权限认证体系中的高精尖武器。通过对表中列的授权,可以实现只允许从某主机来的某用户访问某库的某表的某列。
(system@localhost) [mysql]> grant select (phoneno) on hugcdb.users to hugc;
(system@localhost) [mysql]> select * from mysql.columns_priv;
(system@localhost) [mysql]> select * from mysql.table_priv where user=’hugc’;
tables_priv只是表级粗粒度的记录,columns_priv才是决定列级权限粒度的核心
尽管通过查看表结构,或者使用select语句查询表数据时只能查到被授予权限的列,但是,该用户查询information_schema.tables或其他相关字典表时,看到的表的信息仍然是完整的,比如表的大小、索引大小、平均列长度等,这也是information_schema库比较特殊的另一个体现
 
程序:
MySQL中的程序(ROUTINE)主要是指procedurefunction两类对象,在mysql.procs_priv表中。拥有create routine权限的用户能够创建procedurefunction对象。这个权限是用户/库一级权限,而executealter routinegrant3个权限则是对象级,都是针对某个指定的procedurefunction做授权
 
用户与权限设定原则:
最终确定以库为单位创建账户,在达到安全设定目标的前提下,尽可能简化流程,将权限级别设为3级:主要用于应用端的业务
{user}_oper:定义为操作用户,拥有指定库下所有对象的操作权限,授予增加(insert),删除(delete),修改(update),查询(select)记录的权限,主要用于前端应用程序,连接数据库读写数据。
{user}_read:定义为只读用户,拥有指定库下对象的读取权限,授予查询记录的权限,可用于数据查询、SQL调试、数据验证、数据导出等操作,对于做了多谢分离的应用,只读访问也使用本账户。
{user}_mgr:定义为管理账户,拥有多个库下对象操作权限,用于各项目负责人实时操作对象数据。
所有系统维护账户两个原则:
MySQL数据库的管理员账户改名,不允许出现root名称的用户
  
用户访问域设定为服务器所在IP
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-274231-1-1.html 上篇帖子: MySQL Cluster 7.3.5安装配置 下篇帖子: 加大mysql的最大连接数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表