`
jaychang
  • 浏览: 731330 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

MySQL的用户设置与授权

阅读更多

 

摘要:本文介绍了如何建立用户,如何为用户分配权限。GRANT语句虽然能够为用户分配权限,使用比较方便,但是从安全角度,从增加对系统了解角度,你应该尽量使用直接修改授权表的方法。这样可以更精确的控制授权,能够对授权表完全了解,避免因为 GRANT语句的错误,是MySQL服务器的安全性降低。

你可以有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。

使用SHOW GRANTS语句显示用户的授权

你可以直接查看授权表,也可以使用SHOW GRANTS语句查看某个用户的授权,这种情况下使用SHOW GRANTS语句显然要方便一些。

语法:SHOW GRANTS FOR user_name

为了容纳对任意主机的用户授予的权利,MySQL支持以格式指定user_name值。

例如,下面的语句显示一个用户admin的权限:

mysql>SHOW GRANTS FOR ;

其结果为创建该用户的GRNAT授权语句:

GRANT RELOAD, SHUTDOWN, PROCESS ON *.* TO IDENTIFIED BY PASSWORD '28e89ebc62d6e19a'

密码是加密后的形式。

使用GRANT语句创建用户并授权

GRANT语句的语法

GRANT priv_type (columns)
ON what
TO user IDENTIFIED BY “password”
WITH GRANT OPTION


要使用该语句,需要填写以下部分:

·priv_type 分配给用户的权限。

priv_type可以指定下列的任何一个:

ALL PRIVILEGES      FILE                RELOAD

ALTER               INDEX               SELECT

CREATE              INSERT              SHUTDOWN

DELETE              PROCESS             UPDATE

DROP                REFERENCES          USAGE

ALL是ALL PRIVILEGES的一个同义词,REFERENCES还没被实现,USAGE当前是“没有权限”的一个同义词。它能用在你想要创建一个没有权限用户的时候。

对于表,你能指定的唯一priv_type值是SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、INDEX和ALTER。

对于列,你能指定的唯一priv_type值是(即,当你使用一个column_list子句时)是SELECT、INSERT和UPDATE。

·columns 权限适用的列。

这是可选的,只来设置列专有的权限。如果命名多于一个列,则用逗号分开。

·what 权限应用的级别

GRANT允许系统主管在4个权限级别上授权MySQL用户的权利:

·全局级别

全局权限作用于一个给定服务器上的所有数据库。这些权限存储在mysql.user表中。 你能通过使用ON *.*语法设置全局权限

·数据库级别

数据库权限作用于一个给定数据库的所有表。这些权限存储在mysql.db和mysql.host表中。 你能通过使用ON db_name.*语法设置数据库权限。如果你指定ON *并且你有一个当前数据库,你将为该数据库设置权限。(警告:如果你指定ON *而你没有一个当前数据库,你将影响全局权限!)

·表级别

表权限作用于一个给定表的所有列。这些权限存储在mysql.tables_priv表中。你能透过 ON tbl_name,为具体的表名设置权限。

·列级别

列权限作用于在一个给定表的单个列。这些权限存储在mysql.columns_priv表中。你可以通过指定一个columns子句将权限授予特定的列,同时要在ON子句中指定具体的表。

对与一个表或列的权限是由4个权限级别的逻辑或形成的。例如,如果mysql.user表指定一个用户有一个全局select权限,它不能被数据库、表或列的一个条目否认。

对于一个列的权限能如下计算:

global privileges
OR (database privileges AND host privileges)
OR table privileges
OR column privileges


在大多数情况下,你只授予用户一个权限级别上的权限,因此现实通常不象上面所说的那样复杂。

user 使用权限的用户。

为了容纳对任意主机的用户授予的权利,MySQL支持以格式指定user_name值。如果你想要指定一个特殊字符的一个user字符串(例如“-”),或一个包含特殊字符或通配符的host字符串(例如“%”),你可以用括号括起能用户或主机名字 (例如,)。

你能在主机名中指定通配符。例如,"适用于在loc.gov域中任何主机的user,并且"适用于在144.155.166类 C 子网中任何主机的user。

简单形式的user是"的一个同义词。注意:如果你允许匿名用户连接MySQL服务器(它是缺省的),你也应该增加所有本地用户如 ,因为否则,当用户试图从本地机器上登录到MySQL服务器时,对于mysql.user表中的本地主机的匿名用户条目将被使用!匿名用户通过插入有User=''的条目到mysql.user表中来定义。通过执行这个查询,你可以检验它是否作用于你:

mysql> SELECT Host,User FROM mysql.user WHERE User='';

·password 分配给该用户的口令。这也是可选的。

在MySQL 3.22.12或以后,如果创建一个新用户或如果你有全局授予权限,用户的口令将被设置为由IDENTIFIED BY子句指定的口令,如果给出一个。如果用户已经有了一个口令,它被一个新的代替。

警告:如果你创造一个新用户但是不指定一个IDENTIFIED BY子句,用户没有口令。这是不安全的。

·WITH GRANT OPTION子句是可选的。

WITH GRANT OPTION子句给与用户有授予其他用户在指定的权限水平上的任何权限的能力。你应该谨慎对待你授予他grant权限的用户,因为具有不同权限的两个用户也许能合并权限!

创建用户并授权的实例

创建一个具有超级用户权利的用户:

mysql>GRANT ALL ON *.* TO IDENTIFIED BY "passwd"->WITH GRANT OPTION

该语句将在user表中为创建一个记录,打开所有权限。

数据库级权限用一个ON db_name.*子句而不是ON *.*进行授权:

mysql>GRANT ALL ON sample.* TO IDENTIFIED BY "ruby"

这些权限不是全局的,所以它们不存储在user表中,我们仍然需要在user表中创建一条记录(使得用户能连接),但我们也需要创建一个db表记录记录数据库集的权限。

直接修改授权表创建用户并授权

如果你还记得前面的介绍,你应该能即使不用GRANT语句也能做GRANT做的事情。记住在你直接修改授权表时,你将通知服务器重载授权表,否则他不知道你的改变。你可以执行一个mysqladmin flush-privileges或mysqladmin reload命令和FLUSH PRIVILEGES语句强迫一个重载。如果你忘记做这个,你会疑惑为什么服务器不做你想做的事情。

下列GRANT语句创建一个拥有所有权的超级用户。包括授权给别人的能力:

GRANT ALL ON *.* TO IDENTIFIED BY "passwd" WITH GRANT OPTION

该语句将在user表中为创建一个记录,打开所有权限,因为这里是超级用户(全局)权限存储的地方,要用INSERT语句做同样的事情,语句是:

INSERT INTO user  VALUES("localhost","anyname",PASSWORD("passwd"),
"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y")

你可能发现它不工作,这要看你的MySQL版本。授权表的结构已经改变而且你在你的user表可能没有14个权限列。用SHOW COLUMNS找出你的授权表包含的每个权限列,相应地调整你的INSERT语句。下列GRANT语句也创建一个拥有超级用户身份的用户,但是只有一个单个的权限:

GRANT RELOAD ON *.* TO IDENTIFIED BY "flushpass"

本例的INSERT语句比前一个简单,它很容易列出列名并只指定一个权限列。所有其它列将设置为缺省的"N":

INSERT INTO user (Host,Password,Reload) VALUES("localhost","flush",PASSWORD("flushpass"),"Y")

数据库级权限用一个ON db_name.*子句而不是ON *.*进行授权:

GRANT ALL ON sample.* TO IDENTIFIED BY "ruby"

这些权限不是全局的,所以它们不存储在user表中,我们仍然需要在user表中创建一条记录(使得用户能连接),但我们也需要创建一个db表记录记录数据库集权限:

mysql> INSERT INTO user (Host,User,Password)
-> VALUES("localhost","boris",PASSWORD("ruby")) ;
mysql> INSERT INTO db VALUES
-> ("localhost","sample_db","boris","Y","Y","Y","Y","Y","Y","N","Y","Y","Y");


"N"列是为GRANT权限;对末尾的一个数据库级具有WITH GRANT OPTION的GRANT语句,你要设置该列为"Y"。

要设置表级或列级权限,你对tables_priv或columns_priv使用INSERT语句。当然,如果你没有GRANT语句,你将没有这些表,因为它们在MySQL中同时出现。如果你确实有这些表并且为了某些原因想要手工操作它们,要知道你不能用单独的列启用权限。

你设置tables_priv.Table_priv或columns_priv.Column_priv列来设置包含你想启用的权限值。例如,要对一个表启用SELECT和INSERT权限,你要在相关的tables_priv的记录中设置Table_priv为"Select,Insert"。

分享到:
评论

相关推荐

    远程用户连接mysql授权

    本文将详细介绍如何为远程用户授权访问MySQL服务器的方法。 #### 二、远程用户连接MySQL授权原理 在MySQL中,每个用户的权限是根据其来源主机地址来确定的。这意味着即使是同一个用户名,从不同的主机登录时所拥有...

    MySQL用户管理和用户授权详解.pdf

    MySQL用户管理和用户授权是数据库系统中的关键操作,用于确保数据安全和访问控制。本文将详细介绍MySQL中的用户管理,包括创建用户、查看用户信息、重命名用户、删除用户以及修改密码,以及用户授权的相关操作,如...

    MySQL管理密码用户授权实践

    2. MySQL用户授权及撤销 用户授权和撤销是数据库管理中另一个重要的方面,这允许管理员控制不同用户对数据库的访问权限。 2.1 用户授权 为了给予用户访问数据库的权限,管理员需要执行授权操作。授权的基本语句...

    MySql用户创建、授权以及删除

    MySQL是世界上最流行的开源关系型数据库管理系统之一,其用户管理...总的来说,对MySQL用户进行创建、授权和删除操作是数据库管理的基础。理解并熟练掌握这些操作,可以帮助你更好地控制数据库访问权限,确保数据安全。

    MySQL中创建用户及授权

    MySQL 中创建用户及授权 MySQL 中创建用户及授权是数据库管理中的一项重要任务。以下是创建用户及授权的详细介绍。 创建用户 在 MySQL 中创建用户有两种方法:使用 CREATE USER 命令和使用 GRANT 命令。 使用 ...

    Mysql用户及授权

    以下是关于MySQL用户及授权的一些详细知识点: 1. **创建用户**: - `CREATE USER` 命令用于创建新的MySQL用户。例如: ```sql CREATE USER 'username'@'host' IDENTIFIED BY 'password'; ``` - `username` 是...

    MySQL中创建用户与授权用户--abiao.txt

    ### MySQL中创建用户与授权用户 #### 创建用户 在MySQL中创建用户是一项基本但非常重要的管理任务,这对于确保数据安全性和正确地分配访问权限至关重要。根据提供的内容,“MySQLдûȨʵַڸտʼӴmysqlѿԲο”...

    MySQL多表查询、事务和管理用户及授权

    本文将深入探讨MySQL中的多表查询、事务处理以及用户管理和权限授权。 **一、多表查询** 在数据库设计中,往往需要处理多个相关表的数据。MySQL提供了多种多表查询方法,包括: 1. **JOIN操作**:JOIN允许你将两...

    mysql 的root 用户无法授权及解决navicat 远程授权提示1044问题

    #------------mysql root 用户无法赋权问题解决 -------- 1,登录 mysql -u root -p 2,use mysql; 选择mysql数据库 3,执行以下操作(查询用户的赋权权限,更改赋权权限 ,刷新生效) mysql> select user,host,...

    MySQL新建用户,授权,删除用户,修改密码

    本文将深入探讨如何在MySQL中新建用户、授权、删除用户以及修改密码的过程与细节,旨在为数据库管理员提供实用的操作指南。 ### MySQL新建用户 新建用户是数据库管理中最基础的操作之一。在MySQL中,这一过程可以...

    mysql授权问题解决办法

    本文将详细介绍如何解决MySQL中的授权问题,包括但不限于如何更改root用户的密码、如何确保数据库服务正常运行以及如何通过命令行执行特定的初始化脚本。 #### 一、系统管理员权限获取 在解决MySQL授权问题之前,...

    MySQL用户权限设置

    ### MySQL用户权限设置详解 #### 一、创建新用户与基本权限设置 在MySQL中,创建新用户是一项基本但至关重要的任务。以下是如何通过root用户登录后创建新用户及其相关权限设置的过程: **命令示例:** ```sql ...

    MySql练习2:创建数据库及登录用户并授权.zip

    MySql练习2:创建数据库及登录用户并授权.zip MySql练习2:创建数据库及登录用户并授权.zip MySql练习2:创建数据库及登录用户并授权.zip MySql练习2:创建数据库及登录用户并授权.zip

    mysql远程访问授权

    远程访问授权是MySQL服务器安全策略的重要组成部分,它允许数据库管理员为特定用户设置访问权限,确保只有授权用户能够从远程位置连接到数据库服务器。 ### MySQL远程访问授权原理 MySQL使用基于用户的权限系统来...

    2018最新PHP+mysql域名授权查询系统,可配合第一个使用

    - 安装和配置:有详细的安装文本指导,方便用户设置和部署。 为了保证系统的安全性和功能性,使用者应确保所有组件都已正确安装并及时更新,以抵御潜在的安全威胁,并利用最新的技术标准。同时,了解如何配置和维护...

    MySQL 设置远程访问

    MySQL数据库是世界上最流行的开源关系型数据库之一,...总结来说,MySQL设置远程访问涉及修改服务器配置和授权用户,这使得从远程位置连接和管理数据库成为可能。在实施时,必须确保适当的安全措施以防止未授权访问。

    mysql数据操作和mysql授权操作

    授权管理是MySQL的另一关键部分,用于控制用户对数据库的访问权限。`GRANT`和`REVOKE`语句用于赋予或撤销权限。例如,以下命令将`select`, `insert`, `update`权限授予用户`jane`: ```sql GRANT SELECT, INSERT, ...

    MySQL创建数据库与创建用户以及授权

    --用户授权数据库  *代表整个数据库 4、flush privileges ;--立即启用修改 5、revoke all on *.* from tester;--取消用户所有数据库(表)的所有权限 6、delete from mysql.user where user='tester';--删除...

    mysql新建用户及授权.txt

    mysql新建用户及授权

Global site tag (gtag.js) - Google Analytics