共计 3579 个字符,预计需要花费 9 分钟才能阅读完成。
MySQL 数据库的授权原则有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
服务器重新启动的情况
当 mysqld 启动时,所有的授权表内容被读进存储器并且从那时开始生效。
被服务器立即应用的情况
用 GRANT、REVOKE 或 SET PASSWORD 对授权表施行的修改会立即被服务器注意到。
直接修改授权表的情况
如果你手工地修改授权表 (使用 INSERT、UPDATE 等等),你应该执行一个 FLUSH PRIVILEGES 语句或运行 mysqladmin flush-privileges 告诉服务器再装载授权表,否则你的改变将不生效,除非你重启服务器。
对现有客户连接的影响情况
当服务器注意到授权表被改变了时,现存的客户连接有如下影响:
·表和列权限在客户的下一次请求时生效。
·数据库权限改变在下一个 USE db_name 命令生效。
·全局权限的改变和口令改变在下一次客户连接时生效。
授权原则
无论怎么小心都难免在给用户授权时留有,希望下面的内容能给你一些帮助,你一般应该遵守这些规则。
只有 root 用户拥有授权表的改写权
不要把授权表的改写权授予除 root 用户之外的其它用户(当然,如果你可以用另一个用户代替 root 用户进行管理,以增加安全性)。因为这样,用户可以通过改写授权表而推翻现有的权限。产生安全漏洞。
一般情况下,你可能不会犯这个错误,但是在安装新的分发, 初始授权表之后。这个漏洞是存在的,如果你不了解这时授权表的内容你可能会犯错误。
在 Unix()上,在按照手册的指令安装好 MySQL 后,你必须运行 mysql_install_db 脚本建立包含授权表的 mysql 和初始权限。在 Windows 上,运行分发中的 Setup 程序初始化数据目录和数据库。假定服务器也在运行。
当你第一次在机器上安装 MySQL 时,my 中的授权表是这样初始化的:
·你可以从本地主机(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 权限系统做到:
你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。
你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。