MYSQL教程:MySQL服务器权限表

2016-02-19 16:08 4 1 收藏

今天图老师小编给大家精心推荐个MYSQL教程:MySQL服务器权限表教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

【 tulaoshi.com - 编程语言 】

  MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。下面分别介绍一下这些表的结构和内容:

  user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。

  db权限表:记录各个帐号在各个数据库上的操作权限。

  table_priv权限表:记录数据表级的操作权限。

  columns_priv权限表:记录数据列级的操作权限。

  host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。

  大家注意到,以上权限没有限制到数据行级的设置。在MySQL只要实现数据行级控制就要通过编写程序(使用GET-LOCK()函数)来实现。

  MySQL的版本很多,所以权限表的结构在不同版本间会有不同。如果出现这种情况,可用mysql_fix_privilege_tables脚本来修正。运行方式如下:

% mysql_fix_privilege_tables rootpassword      #这里要给出MySQL的root用户密码

  最好一下子升级到MySQL 4.0.4版本,因为4.0.2和4.0.3的db表没有Create_tmp_table_priv和Lock_tables_priv权限。

  MySQL的权限表定义了两部份内容,一个部份定义权限的范围,即谁(帐户)可以从哪里(客户端主机)访问什么(数据库、数据表、数据列);另一部份定义权限,即控制用户可以进行的操作。下面是一些常用的权限介绍,可直接在GRANT语句中使用。

  CREATE TEMPORARY TABLES,允许创建临时表的权限。

  EXECUTE,允许执行存储过程的权限,存储过程在MySQL的当前版本中还没实现。

  FILE,允许你通过MySQL服务器去读写服务器主机上的文件。但有一定限制,只能访问对任何用户可读的文件,通过服务器写的文件必须是尚未存在的,以防止服务器写的文件覆盖重要的系统文件。尽管有这些限制,但为了安全,尽量不要把该权限授予普通用户。并且不要以root用户来运行MySQL服务器,因为root用户可在系统任何地方创建文件。

  GRANT OPTION,允许把你自已所拥有的权限再转授给其他用户。

  LOCK TABLES,可以使用LOCK TABLES语句来锁定数据表

  PROCESS,允许你查看和终止任何客户线程。SHOW PROCESSLIST语句或mysqladmin processlist命令可查看线程,KILL语句或mysqladmin kill命令可终止线程。在4.0.2版及以后的版本中,PROCESS权限只剩下查看线程的能力,终止线程的能力由SUPER权限控制。

  RELOAD,允许你进行一些数据库管理操作,如FLUSH,RESET等。它还允许你执行mysqladmin命令:reload,refresh,flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables和flush-threads。

  REPLICATION CLIENT,允许查询镜像机制中主服务器和从服务器的位置。

  REPLICATION SLAVE,允许某个客户连接到镜像机制中的主服务器并请求发送二进制变更日志。该权限应授予从服务器用来连接主服务器的帐号。在4.0.2版这前,从服务器是用FILE权限来连接的。

  SHOW DATABASES,控制用户执行SHOW DATABASES语句的权限。

  SUPER,允许终止线程,使用mysqladmin debug命令,使用CHANGE MASTER,PURGE MASTER LOGS以及修改全局级变量的SET语句。SUPER还允许你根据存放在DES密钥文件里的密钥进行DES解密的工作。

  user权限表中有一个ssl_type数据列,用来说明连接是否使用加密连接以及使用哪种类型的连接,它是一个ENUM类型的数据列,可能的取值有:

  NONE,默认值,表示不需加密连接。

  ANY,表示需要加密连接,可以是任何一种加密连接。由GRANT的REQUIRE SSL子句设置。

  X509,表示需要加密连接,并要求客户提供一份有效的X509证书。由GRANT的REQUIRE X509子句设置。

  SPECIFIED,表示加密连接需满足一定要求,由REQUIRE子句的ISSUER,SUBJECT或CIPHER的值进行设置。只要ssl_type列的值为SPECIFIED,则MySQL会去检查ssl_cipher(加密算法)、x509_issuer(证书签发者)和x509_subject(证书主题)列的值。这几列的列类型是BLOB类型的。

  user权限表里还有几列是设置帐户资源使用情况的,如果以下数据列中的数全为零,则表示没有限制:

  max_connections,每小时可连接服务器的次数。

  max_questions,每小时可发出查询命令数。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  max_updates,每小时可以发出的数据修改类查询命令数。

  设置权限表应注意的事项:

  删除所有匿名用户。

  查出所有没有口令用户,重新设置口令。可用以下命令查询空口令用户:

mysql SELECT host,user FROM user WHERE password = '';

  尽量不要在host中使用通配符。

  最好不要用user权限表进行授权,因为该表的权限都是全局级的。

  不要把mysql数据库的权限授予他人,因为该数据库包含权限表。

  使用GRANT OPTION权限时不要滥用。

  FILE权限可访问文件系统中的文件,所以授权时也要注意。一个具有FILE权限的用户执行以下语句就可查看服务器上全体可读的文件:

mysql CREATE TABLE etc_passwd(pwd_entry TEXT);
mysql LOAD DATA INFILE '/etc/passwd' INTO TABLE etc_passwd;
mysql SELECT * FROM etc_passwd;

  如果MySQL服务器数据目录上的访问权限设置得不好,就会留下让具有FILE权限的用户进入别人数据库的安全漏洞。所以建议把数据目录设置成只能由MySQL服务器读取。下面演示一个利用具有FILE权限的用户读取数据目录中文件权限设置不严密的数据库数据的过程:

mysql use test;
mysql create table temp(b longblob);
mysql show databases          #显示数据库名清单,--skip-show-database可禁止该功能
mysql load data infile './db/xxx.frm' into table temp fields escaped by '' lines terminated by '';
mysql select * from temp into outfile 'xxx.frm' fields escaped by '' lines terminated by '';
mysql delete from temp;
mysql load data infile './db/xxx.MYD' into table temp fields escaped by '' lines terminated by '';
mysql select * from temp into outfile 'xxx.MYD' fields escaped by '' lines terminated by '';
mysql delete from temp;
mysql load data infile './db/xxx.MYI' into table temp fields escaped by '' lines terminated by '';
mysql select * from temp into outfile 'xxx.MYI' fields escaped by '' lines terminated by '';
mysql delete from temp;


  这样,你的数据库就给人拷贝到本地了。如果服务器是运行在root用户下,那危害就更大了,因为root可在服务器上做任何的操作。所以尽量不要用root用户来运行服务器。

  只把PROCESS权限授予可信用户,该用户可查询其他用户的线程信息。

  不要把RELOAD权限授予无关用户,因为该权限可发出FLUSH或RESET语句,这些是数据库管理工具,如果用户不当使用会使数据库管理出现问题。

  ALTER权限也不要授予一般用户,因为该权限可更改数据表。

  GRANT语句对权限表的修改过程:

  当你发送一条GRANT语句时,服务器会在user权限表里创建一个记录项并把你用户名、主机名和口令记录在User、Host和Password列中。如果设置了全局权限,由把该设置记录在相在的权限列中。

  如果在GRANT里设置了数据库级权限,你给出的用户名和主机名就会记录到db权限表的User和Host列中,数据库名记录在Db列中,权限记录到相关的权限列中。

  接着是到数据表和数据列级的权限设置,设置方法和上面的一样。服务器会把用户名、主机名、数据库名以及相应的数据表名和数据列名记录到数据表中。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  删除用户权限其实就是把这些权限表中相应的帐号记录全部删除即可。

来源:https://www.tulaoshi.com/n/20160219/1611128.html

延伸阅读
在讨论如何启动MySQL服务器之前,让我们考虑一下应该以什么用户身份运行MySQL服务器。服务器可以手动或自动启动。如果你手动启动它,服务器以你登录Unix(Linux)的用户身份启动,即如果你用paul登录Unix并启动服务器,它用paul运行;如果你用su命令切换到root,然后运启动服务器,则它以root运行。然而,大多数情况下你可能不想手动启动服务器...
标签: Web开发
Apache 1.3.22 for Win32+PHP 4.0.6+Active Perl 5.006001+Zend Optimizer v1.1.0+mod_gzip 1.3.19.1a+MySQL 4.0.0 Alpha  Apache 1.X for win32虽然**能差(和IIS比起来差太远了,希望2.X for win32早点出),但是它的bug比较少,资源占用也少,而且...
三、停止服务器      要手工启动服务器,使用MySQLadmin:      %mysqladmin shutdown      要自动停止服务器,你不需做特别的事情。BSD系统一般通过向进程发一个TERM信号停止服务,它们或者正确应答它或被粗鲁地杀死。mysqld在它收到这个信号时以终止作...
标签: PHP
  通过一个小时的研究和设置.实现了最新的 PHP 5.0 + MYSQL 5.0 + WIN2003. 个人认为还是有必要写个教程出来.因为很多方面和老版本的不尽相同. 说实话自己也是查阅了很多官方文档才解决了很多怪异问题. ========================= 相关软件均可以在 WWW.SKYCN.NET 下载. MYSQL 5.0 FOR WINDOWS PHP 5.0 FOR WINDOWS PHPMYADMIN WIND...
6.2 客户机程序1连接到服务器 我们的第一个MySQL客户机程序很简单:连接到服务器、断开,并退出。它本身并不是非常有用,但是必须知道如何做它,因为实际上用MySQL数据库做任何事情都必须与服务器连接。这是一个公用的操作,开发创建连接的代码是编写每个客户机程序都将使用的代码。除此之外,这项任务带给我们一些简单开始的事情。以...

经验教程

935

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部