`
zhuruxin86
  • 浏览: 106414 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql权限详解

 
阅读更多
转载:http://nyu16.blog.163.com/blog/static/1281536200812094641794/
MySQL权限系统的主要功能是证实连接到一台给定主机的一个用户,并且赋予该用户在一个数据库上select、 insert、update和delete的权限。

    由MySQL使用用户名和口令的方法与Unix或Windows使用的方式有很多不同之处:


MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用户名作为MySQL用户名登录,但是这仅仅为了方便。客户程序允许用-u或--user选项指定一个不同的名字,这意味着无论如何你不能使得一个数据库更安全,除非所有的MySQL用户名都有口令。任何人可以试图用任何名字连接服务器,而且如果他们指定了没有口令的任何名字,他们将成功。


•MySQL用户名最长可以是16各字符;典型地,Unix用户名限制为8个字符。
•MySQL口令与Unix口令没关系。在你使用登录到一台Unix机器口令和你使用在那台机器上存取一个数据库的口令之间没有必要有关联。
•MySQL加密口令使用了一个Unix登录期间所用的不同算法,见7.4.12 杂项函数一节中描述PASSWORD()和ENCRYPT()函数部分。

附加的功能包括有一个匿名的用户和对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。

   

当你想要存取一个MySQL服务器时,MySQL客户程序一般要求你指定连接参数:你想要联接的主机、你的用户名和你的口令。例如,mysql客户可以象这样启动(可选的参数被包括在“[”和“]”之间):

shell> mysql [-h host_name][-u user_name][-pyour_pass ]

-h, -u和-p选项的另一种形式是--host=host_name、--user=user_name和--password=your_pass。注意在-p或--password=与跟随它后面的口令之间没有空格。

注意:在命令行上指定一个口令是不安全的!随后在你系统上的任何用户可以通过打类似这样的命令发现你的口令:ps auxww。见4.15.4 选项文件。

对于命令行没有的联接参数,mysql使用缺省值:

•缺省主机名是localhost。
•缺省用户名是你的Unix登录名。
•如果没有-p,则没有提供口令。

这样, 对一个Unix用户joe,下列命令是等价的:

shell>mysql -h localhost -u joe shell>mysql -h localhost shell>mysql -u joe shell>mysql

其它MySQL客户程序有同样表现。

在Unix系统上,当你进行一个连接时,你可以指定要使用的不同的缺省值,这样你不必每次在你调用一个客户程序是在命令行上输入他们。这可以有很多方法做到:

•你能在你的主目录下“.my.cnf”的配置文件的[client]小节里指定连接参数。文件的相关小节看上去可能像这样:

[client] host=host_name user=user_name password=your_pass

见4.15.4 选项文件。

•你可以用环境变量指定连接参数。主机可用MYSQL_HOST指定,MySQL用户名字可用USER指定(仅对 Windows),口令可用MYSQL_PWD指定(但是这不安全,见下一节) 。

如果连接参数以多种方法被指定,在命令行上被指定的值优先于在配置文件和环境变量中指定的值,而在配置文件指定的值优先于在环境变量指定的值。

   

以一种暴露的可被其他用户发现的方式指定你的口令是不妥当的。当你运行客户程序时,你可以使用下列方法指定你的口令,还有每个方法的风险评估:

•使用一个在命令行上-pyour_pass或--password=your_pass的选项。这很方便但是不安全,因为你的口令对系统状态程序(例如ps)变得可见,它可以被其他的用户调用来显示命令行。(一般MySQL客户在他们的初始化顺序期间用零覆盖命令行参数,但是仍然有一个短暂间隔时间内参数值可见的。)
•使用一个-p或--password选项(没有指定your_pass值)。在这种情况下,客户程序请求来自终端的口令:

shell>mysql - u user_name - pEnter password: ********

客户回应“*”字符到作为输入你的口令的终端使得旁观者不能看见它。因为它对其他用户不可见,与在命令行上指定它相比,这样进入你的口令更安全。然而,这个输入一个口令的方法仅仅为你交互式运行程序是合适的。如果你想要从非交互式运行的一个脚本调用一个客户,就没有从终端输入入口令的机会。

•在一个配置文件中存储你的口令。例如,你可你的主目录的“.my.cnf”文件中的[client]节列出你的口令:

[client]password=your_pass

如果你在“.my.cnf”里面存储口令,文件应该不是组或世界可读或可写的。保证文件的存取模式是400或600。见4.15.4 选项文件。

•你可在MYSQL_PWD环境变量中存储口令,但是这个方法必须想到是极不安全的且应该不使用。ps的某些版本包括显示运行进程的环境的选项;如果你设定MYSQL_PWD,你的口令将对所有人是显而易见的,甚至在没有这样一个版本的ps系统上,假设没有其他方法观察到进程环境是不明智的。

总之,最安全的方法是让客户程序提示口令或在一个适当保护的“.my.cnf”文件中指定口令。

   

权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。在MySQL启动时和在6.9 权限修改何时生效所说的情况时,服务器读入这些数据库表内容。

本手册所用的涉及由MySQL提供的权限名称显示在下表,还有在授权表中每个权限的表列名称和每个权限有关的上下文:


权限  列  上下文 
select  Select_priv  表
insert  Insert_priv  表
update  Update_priv  表
delete  Delete_priv  表
index  Index_priv  表
alter  Alter_priv  表
create  Create_priv  数据库、表或索引
drop  Drop_priv  数据库或表
grant  Grant_priv  数据库或表
references  References_priv  数据库或表
reload  Reload_priv  服务器管理
shutdown  Shutdown_priv  服务器管理
process  Process_priv  服务器管理
file  File_priv  在服务器上的文件存取


select、insert、update和delete权限允许你在一个数据库现有的表上实施操作。

SELECT语句只有在他们真正从一个表中检索行是才需要select权限,你可以执行某个SELECT语句,甚至没有任何到服务器上的数据库里的存取任何东西的许可。例如,你可使用mysql客户作为一个简单的计算器:

mysql> SELECT 1+1;mysql> SELECT PI()*2;

index权限允许你创建或抛弃(删除)索引。

alter权限允许你使用ALTER TABLE。

create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表。

注意:如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库!

grant权限允许你把你自己拥有的那些权限授给其他的用户。

file权限给予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读和写服务器上的文件,任何被授予这个权限的用户都能读或写MySQL服务器能读或写的任何文件。

其余的权限用于管理性操作,它使用mysqladmin程序实施。下表显示mysqladmin支配每个管理性权限允许你执行的命令:


命令 权限拥有者允许执行的命令 
reload  reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables 
shutdown  shutdown 
precess  processlist, kill 


reload命令告诉服务器再读入授权表,refresh命令清洗所有表并打开和关闭记录文件,flush-privileges是reload的一个同义词,其它flush-*命令执行类似refresh的功能,但是范围更有限,并且在某些情况下可能更好用。例如,如果你只是想清洗记录文件,flush-logs比refresh是更好的选择。

shutdown命令关掉服务器。

processlist命令显示在服务器内执行的线程的信息。kill命令杀死服务器线程。你总是能显示或杀死你自己的线程,但是你需要process权限来显示或杀死其他用户启动的线程。

总的说来,只授予权限给需要他们的那些用户是一个好主意,但是你应该在授予某个权限时试验特定的警告:

•grant权限允许用户放弃他们的权限给其他用户。2个有不同的权限并有grant权限的用户可以合并权限。
•alter权限可以用于通过重新命名表来推翻权限系统。
•file权限可以被滥用在服务器上读取任何世界可读(world-readable,即任何人可读)的文件到一张数据库表,然后其内容能用SELECT被存取。
•shutdown权限通过终止服务器可以被滥用完全拒绝为其他用户服务, 。
•precess权限能被用来察看当前执行的查询的普通文本,包括设定或改变口令查询。
•在mysql数据库上的权限能被用来改变口令和其他存取权限信息。(口令被加密存储,所以一个恶意的用户不能简单地读取他们。然而,有足够的权限,同一个用户能用不同的一个代替一个口令。)

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

•你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。
•你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。

    

    MySQL权限系统保证所有的用户可以严格地做他们假定被允许做的事情。当你连接一个MySQL服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和你想做什么来授予权限。

    MySQL在认定身份中考虑你的主机名和用户名字,是因为有很小的原因假定一个给定的用户在因特网上属于同一个人。例如,用户从whitehouse.gov连接的bill不必和从mosoft.com连接bill是同一个人。 MySQL通过允许你区分在不同的主机上碰巧有同样名字用户来处理它:你可以对从whitehouse.gov连接授与bill一个权限集,而为从microsoft.com的连接授予一个不同的权限集。

MySQL存取控制包含2个阶段:

•阶段1:服务器检查你是否允许连接。
•阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库中一个表精选(select)行或从数据库抛弃一个表,服务器确定你对表有select权限或对数据库有drop权限。

服务器在存取控制的两个阶段使用在mysql的数据库中的user、db和host表,在这些授权表中字段如下:


表名称  user  db  host 
范围字段  Host  Host  Host 
  User  Db  Db 
  Password  User   
权限字段  Select_priv  Select_priv  Select_priv 
  Insert_priv  Insert_priv  Insert_priv 
  Update_priv  Update_priv  Update_priv 
  Delete_priv  Delete_priv  Delete_priv 
  Index_priv  Index_priv  Index_priv 
  Alter_priv  Alter_priv  Alter_priv 
  Create_priv  Create_priv  Create_priv 
  Drop_priv  Drop_priv  Drop_priv 
  Grant_priv  Grant_priv  Grant_priv 
  Reload_priv     
  Shutdown_priv     
  Process_priv     
  File_priv     


对存取控制的第二阶段(请求证实),如果请求涉及表,服务器可以另外参考tables_priv和columns_priv表。这些表的字段如下:


表名称 tables_priv  columns_priv 
范围字段  Host  Host 
  Db  Db 
  User  User 
  Table_name  Table_name 
    Column_name 
权限字段  Table_priv  Column_priv 
  Column_priv   
其他字段  Timestamp  Timestamp 
  Grantor   


每个授权表包含范围字段和权限字段。

范围字段决定表中每个条目的范围,即,条目适用的上下文。例如, 一个user表条目的Host和User值为'thomas.loc.gov'和'bob'将被用于证实来自主机thomas.loc.gov的bob对服务器的连接。同样,一个db表条目的Host、User和Db字段的值是'thomas.loc.gov'、'bob'和'reports'将用在bob从主机联接thomas.loc.gov存取reports数据库的时候。 tables_priv和columns_priv表包含范围字段,指出每个条目适用的表或表/列的组合。

对于检查存取的用途,比较Host值是忽略大小写的。User、Password、Db和Table_name值是区分大小写的。Column_name值在MySQL3.22.12或以后版本是忽略大小写的。

权限字段指出由一个表条目授予的权限,即,可实施什么操作。服务器组合各种的授权表的信息形成一个用户权限的完整描述。为此使用的规则在6.8 存取控制, 阶段2:请求证实描述。

范围字段是字符串,如下所述;每个字段的缺省值是空字符串:


字段名  类型 
Host  CHAR(60) 
User  CHAR(16) 
Password  CHAR(16) 
Db  CHAR(64)  (tables_priv和columns_priv表为CHAR(60))


在user、db和host表中,所有权限字段被声明为ENUM('N','Y')--每一个都可有值'N'或'Y',并且缺省值是'N'.

在tables_priv和columns_priv表中,权限字段被声明为SET字段:


表名  字段名  可能的集合成员 
tables_priv  Table_priv  'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' 
tables_priv  Column_priv  'Select', 'Insert', 'Update', 'References' 
columns_priv  Column_priv  'Select', 'Insert', 'Update', 'References' 


简单地说,服务器使用这样的授权表:

•user表范围字段决定是否允许或拒绝到来的连接。对于允许的连接,权限字段指出用户的全局(超级用户)权限。
•db和host表一起使用:
◦db表范围字段决定用户能从哪个主机存取哪个数据库。权限字段决定允许哪个操作。
◦当你想要一个给定的db条目应用于若干主机时,host表作为db表的扩展被使用。例如,如果你想要一个用户能在你的网络从若干主机使用一个数据库,在用户的db表的Host条目设为空值,然后将那些主机的每一个移入host表。这个机制详细描述在6.8 存取控制, 阶段2:请求证实。
•tables_priv和columns_priv表类似于db表,但是更精致:他们在表和列级应用而非在数据库级。

注意管理权限(reload, shutdown, 等等)仅在user表中被指定。这是因为管理性操作是服务器本身的操作并且不是特定数据库,因此没有理由在其他授权表中列出这样的权限。事实上,只需要请教user表来决定你是否执行一个管理操作。

file权限也仅在user表中指定。它不是管理性权限,但你读或谢在服务器主机上的文件的的能力独立于你正在存取的数据库。

当mysqld服务器启动时,读取一次授权表内容。对授权表的更改生效在6.9 权限更改何时生效描述。

当你修改授权表的内容时,确保你按你想要的方式更改权限设置是一个好主意。为帮助诊断问题,见6.13 “存取拒绝引起”错误的原因。对于安全问题上的忠告,见6.14 怎么对使MySQL安全对抗解密高手。

一个有用的诊断工具是mysqlaccess脚本,由Carlier Yves 提供给MySQL分发。使用--help选项调用mysqlaccess查明它怎样工作。注意:mysqlaccess仅用user、db和host表仅检查存取。它不检查表或列级权限。
分享到:
评论

相关推荐

    php apache mysql配置详解

    你需要编辑这个文件来设置服务器端口、虚拟主机、目录权限等。 1. **Apache配置**:确保Apache已安装,然后编辑配置文件,开启PHP支持。找到`LoadModule php_module modules/libphp.so`(Windows下可能是...

    MySQL语句总结大全

    ### MySQL权限详解 - **全权限** (`ALL`): 包含所有其他权限。 - **文件权限** (`FILE`): 允许读写服务器文件系统中的文件。 - **进程权限** (`PROCESS`): 允许查看其他用户的运行中的进程或终止它们。 - **重载权限...

    mysql5.1详解简体中文版

    10. **权限系统**:MySQL 5.1的权限管理系统允许管理员精细控制用户的访问权限,可以设置不同的操作级别,如表级、列级甚至行级权限。 11. **日志系统**:包括错误日志、二进制日志(用于复制)和慢查询日志,帮助...

    rubyonrails mysql安装详解

    ### Ruby on Rails与MySQL安装详解 #### 环境配置概览 本文将详细介绍如何在Ubuntu 10.10上从源代码编译安装Ruby 1.8.7、Rails 2.3.5以及MySQL 5.1,旨在为开发者提供一个稳定且高效的开发环境。对于初次接触这些...

    MySQL安全配置详解

    MySQL 安全配置详解 MySQL 是一个真正的多用户、多线程 SQL 数据库服务器,它是一个客户机/服务器结构的实现。MySQL 安全配置详解将指导用户如何正确地配置 MySQL,以确保数据库的安全性。 一、MySQL 安装 MySQL ...

    mysql权限分配和root密码重置

    ### MySQL权限分配与Root密码重置详解 #### 一、MySQL权限分配 **1.1 用户权限管理** 在MySQL中,对于用户权限的管理是非常重要的,尤其是当涉及到多个团队合作时,合理的权限设置能够有效避免数据泄露和其他安全...

    mysql技术详解

    管理用户权限是MySQL安全管理的重要部分。GRANT和REVOKE命令用于授予和撤销权限,而用户账户应使用强密码并定期审计。 8. **备份与恢复** 数据备份是防止数据丢失的关键。可以使用mysqldump工具进行逻辑备份,...

    mysql 参考手册(详解关键字的功能和涉及到的问题)

    4. **安全性**:权限管理是MySQL中的重要概念,包括用户账户的创建、权限的分配以及如何使用“GRANT”和“REVOKE”来管理这些权限。 5. **备份与恢复**:如何使用“mysqldump”进行数据备份,以及如何在需要时恢复...

    全套Mysql技术详解

    本套MySQL技术详解涵盖了从基础到高级的各种知识点,旨在帮助读者全面理解和掌握MySQL的使用。 首先,我们要从安装和配置MySQL开始。安装过程通常包括下载适合你操作系统的MySQL安装包,然后按照向导进行安装。配置...

    mysql详解.txt

    ### MySQL 连接与管理命令详解 #### 一、连接MySQL服务器 在开始介绍之前,我们首先了解一下如何通过命令行工具连接MySQL服务器。 ##### 1. 连接到本机MySQL服务器 - **命令格式**: ```bash mysql -h 主机地址...

    mysql入门详解精要

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,尤其在Web应用程序开发中被广泛使用。本文将深入探讨MySQL的入门知识,帮助你理解其核心概念、安装过程、基本操作以及简单的查询语言。 一、MySQL概述 MySQL...

    php + apache + mysql 配置详解

    ### PHP + Apache + MySQL 配置详解 #### 一、简介 在Web开发领域,PHP、Apache和MySQL是经常被组合使用的三大技术组件。本文将详细介绍如何配置这三种技术,以便构建一个完整的Web应用程序环境。 #### 二、准备...

    mysql 远程root权限

    ### MySQL远程root权限详解 在数据库管理中,MySQL作为一款广泛使用的开源关系型数据库系统,其安全性至关重要。本文将深入探讨“MySQL远程root权限”的概念、实现方法以及相关的安全注意事项。 #### 一、理解...

    大芒果_魔兽世界_mysql_数据库_详解.docx

    《大芒果_魔兽世界_MySQL_数据库_详解》 《大芒果_魔兽世界_MySQL_数据库_详解》是一份关于魔兽世界游戏数据库的详细解释,涵盖了游戏账号、角色数量、道具及任务物品等多方面的知识点。下面将对这些知识点进行详细...

    Centos mysql 安装配置详解

    接着,更改MySQL目录的权限,使其归新创建的用户所有,如`chown -R mysql.mysql /opt/mysql`。初始化数据库,可以使用`mysql_install_db`命令,并修改数据库文件目录的所有者,如`chown –R mysql.mysql /datas/...

    访问Mysql数据库的权限.txt

    #### 一、MySQL权限体系概述 MySQL提供了多层次的权限管理体系,包括全局权限、数据库级权限、表级权限以及列级权限等。这些权限可以根据实际需求灵活分配给不同的用户账户,确保每个用户只能访问其被授权的数据...

    MySQL数据库运维技术详解.pptx

    MySQL数据库运维技术详解 MySQL 数据库运维技术详解是当前 IT 行业中非常重要的一门技术,涉及到数据库管理、数据安全、性能优化等多个方面。下面是对 MySQL 数据库运维技术的详细解释。 MySQL 简介 MySQL 是一...

    MYSQL 安装方法详解

    ### MySQL安装方法详解 #### 一、MySQL简介 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),以其高性能、高可靠性和易用性而著称。它支持多种操作系统,包括Windows、Linux等,并且可以应用于各种规模的...

    CentOS安装MySQL 5.5

    ### CentOS安装MySQL 5.5知识点详解 #### 1. 概述 本文档旨在指导如何在CentOS系统上从源代码编译、安装并配置MySQL 5.5数据库管理系统。该过程涉及到软件环境的准备、编译工具的安装、MySQL源代码的编译与配置等...

Global site tag (gtag.js) - Google Analytics