关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » MySQL »MySQL数据库的授权原则

    MySQL数据库的授权原则

    2015-08-01 00:00:00 出处:ITJS
    分享

    服务器重新启动的情况

    当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权限系统做到:

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

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

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。