热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL数据库的授权原则_MySQL

MySQL数据库的授权原则
服务器重新启动的情况

  当mysqld启动时,所有的授权表内容被读进存储器并且从那时开始生效。

  被服务器立即应用的情况

  用GRANT、REVOKE或SET PASSWORD对授权表施行的修改会立即被服务器注意到。

  直接修改授权表的情况

  如果你手工地修改授权表(使用INSERT、UPDATE等等),你应该执行一个FLUSH PRIVILEGES语句或运行mysqladmin flush-privileges告诉服务器再装载授权表,否则你的改变将不生效,除非你重启服务器。

  对现有客户连接的影响情况

  当服务器注意到授权表被改变了时,现存的客户连接有如下影响:

  ·表和列权限在客户的下一次请求时生效。

  ·数据库权限改变在下一个USE db_name命令生效。

  ·全局权限的改变和口令改变在下一次客户连接时生效。

  授权原则

  无论怎么小心都难免在给用户授权时留有漏洞,希望下面的内容能给你一些帮助,你一般应该遵守这些规则。

  只有root用户拥有授权表的改写权

  不要把授权表的改写权授予除root用户之外的其它用户(当然,如果你可以用另一个用户代替root用户进行管理,以增加安全性)。因为这样,用户可以通过改写授权表而推翻现有的权限。产生安全漏洞。

  一般情况下,你可能不会犯这个错误,但是在安装新的分发, 初始授权表之后。这个漏洞是存在的,如果你不了解这时授权表的内容你可能会犯错误。

  在Unix(Linux)上,在按照手册的指令安装好MySQL后,你必须运行mysql_install_db脚本建立包含授权表的mysql数据库和初始权限。在Windows上,运行分发中的Setup程序初始化数据目录和mysql数据库。假定服务器也在运行。

  当你第一次在机器上安装MySQL时,mysql数据库中的授权表是这样初始化的:

  ·你可以从本地主机(localhost)上以root连接而不指定口令。root用户拥有所有权限(包括管理权限)并可做任何事情。(顺便说明,MySQL超级用户与Unix超级用户有相同的名字,他们彼此毫无关系。)

  ·匿名访问被授予用户可从本地连接名为test和任何名字以test_开始的数据库。匿名用户可对数据库做任何事情,但无管理权限。

  一般地,建议你删除匿名用户记录:

  mysql> DELETE FROM user WHERE User="";

  更进一步,同时删除其他授权表中的任何匿名用户,有User列的表有db、tables_priv和columns_priv。

  另外要给root用户设置密码。

  关于用户、口令及主机的设置

  ·对所有MySQL用户使用口令。

  记住,如果other_user没有口令,任何人能简单地用mysql -u other_user db_name作为任何其它的人登录。对客户机/服务器应用程序,客户可以指定任何用户名是常见的做法。在你运行它以前,你可以通过编辑mysql_install_db脚本改变所有用户的口令,或仅仅MySQL root的口令,象这样:

shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
-> WHERE user='root';
mysql> FLUSH PRIVILEGES;

  ·删除匿名用户

  匿名用户的存在不仅不仅容易引起存取拒绝错误,更会产生严重的安全漏洞,安装授权表后,自动安装匿名用户。缺省时你可以用任何用户名连接,不需要密码,并且具有修改授权表权限。

  你可以这样删除匿名用户:

shell>mysql –u root –p mysql
mysql>delete from user where User=””;

  ·留意使用通配符的主机名,尽量缩小主机名的范围,适合用户的主机就足够了,不要让用户不使用的主机留在授权表里。

  ·如果你不信任你的DNS,你应该在授权表中使用IP数字而不是主机名。原则上讲,--secure选项对mysqld应该使主机名更安全。在任何情况下,你应该非常小心地使用包含通配符的主机名!

  授予用户合适的权限

  ·授权用户足够使用的权限,不要赋予额外的权限。

  例如,对于用户只需要检索数据表的需求,赋予SELECT权限即可,不可赋予UPDATE、INSERT等写权限,不要怕被说成时吝啬鬼。

  ·可能会产生安全漏洞的权限

  grant权限允许用户放弃他们的权限给其他用户。2个有不同的权限并有grant权限的用户可以合并权限。

  alter权限可以用于通过重新命名表来推翻权限系统。 因为ALTER权限可能以你没有设想的任何方法被使用。例如,一个用户user1能访问table1,但不能访问table2。但是如果用户user1带有ALTER权限可能通过使用ALTER TABLE将table2重命名为table1来打乱你的设想。

  shutdown权限通过终止服务器可以被滥用完全拒绝为其他用户服务 。

  ·可能会产生严重安全漏洞的权限

  不要把PROCESS权限给所有用户。mysqladmin processlist的输出显示出当前执行的查询正文,如果另外的用户发出一个UPDATE user SET password=PASSWORD('not_secure')查询,被允许执行那个命令的任何用户可能看得到。mysqld为有process权限的用户保留一个额外的连接, 以便一个MySQL root用户能登录并检查,即使所有的正常连接在使用。

  不要把FILE权限给所有的用户。有这权限的任何用户能在拥有mysqld守护进程权限的文件系统那里写一个文件!为了使这更安全一些,用SELECT ... INTO OUTFILE生成的所有文件对每个人是可读的,并且你不能覆盖已经存在的文件。

  FILE权限也可以被用来读取任何作为运行服务器的Unix用户可存取的文件。这可能被滥用,因为不仅有该服务器主机帐号的用户可以读取它们,而且有FILE权限的任何客户机也可以通过网络读取它们。你的数据库目录和系统的各种文件可能成为全球范围共享的文件!例如,通过使用LOAD DATA装载“/etc/passwd”进一个数据库表,然后它能用SELECT被读入。

  下面的过程说明如何进行此项操作:

  1、建具有LONGBLOB列的表:

mysql> USE test;
mysql> CREATE TABLE temp (b LONGBLOB);

  2、用此表读取你要窃取的文件的内容:

mysql>LOAD DATA INFILE “/etc/passwd” INTO TABLE temp
->FIELDS ESCAPED BY “” LINES TERMINATED BY “”;
mysql>SELECT * FROM temp;

  3、可以这样窃取你的数据表data:

mysql>LOAD DATA INFILE“./other_db/data.frm” INTO TABLE temp
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>SELECT * FROM temp INTO OUTFILE“./another_db/data.frm”
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>DELETE FROM temp;
mysql>LOAD DATA INFILE“./other_db/data.MYD” INTO TABLE temp
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>SELECT * FROM temp INTO OUTFILE“./another_db/data.MYD”
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>DELETE FROM temp;
mysql>LOAD DATA INFILE“./other_db/data.MYI” INTO TABLE temp
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>SELECT * FROM temp INTO OUTFILE“./another_db/data.MYI”
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>DELETE FROM temp;

  然后用户就拥有的一个新表another.data,可以对它进行完全访问。

  MySQL权限系统无法完成的任务

  有一些事情你不能用MySQL权限系统做到:

  你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。

  你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身

推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
author-avatar
大兵_小将
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有