MySQL的用户设置与授权

2016-02-19 19:20 0 1 收藏

下面图老师小编跟大家分享一个简单易学的MySQL的用户设置与授权教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - 编程语言 】

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

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

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

  语法:SHOW GRANTS FOR user_name

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

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

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

  mysqlSHOW GRANTS FOR admin@localhost;

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

  GRANT RELOAD, SHUTDOWN, PROCESS ON *.* TO 'admin'@'localhost' 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。

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

  ·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

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

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

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

  ·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

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

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

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

  ·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@host格式指定user_name值。如果你想要指定一个特殊字符的一个user字符串(例如“-”),或一个包含特殊字符或通配符的host字符串(例如“%”),你可以用括号括起能用户或主机名字 (例如,'test-user'@'test-hostname')。

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

  简单形式的user是user@"%"的一个同义词。注意:如果你允许匿名用户连接MySQL服务器(它是缺省的),你也应该增加所有本地用户如 user@localhost,因为否则,当用户试图从本地机器上登录到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权限的用户,因为具有不同权限的两个用户也许能合并权限!

  创建用户并授权的实例

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

  mysqlGRANT ALL ON *.* TO anyname@localhost IDENTIFIED BY "passwd"-WITH GRANT OPTION

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

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

  mysqlGRANT ALL ON sample.* TO boris@localhost IDENTIFIED BY "ruby"

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

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

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

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

延伸阅读
一、连接MYSQL。 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql 2、例2:连接到远程主机上的MYSQL。...
初次授权申请的成功与否会在很大程度上决定着能否充分地展示产品价值以留住用户,在这个看似不起眼但几乎是一击决定胜败的环节里,我们需要慎之又慎,对于任何优化方案,都要把各种可能性考虑进去。今天分享一个引导流程的实战思考,转化率数据证明,这篇文章很值钱。 我们的Hopper应用,每天会分析海量的机票价格,并能准确的预测价格的变化...
由MySQL使用用户名和口令的方法与Unix或Windows使用的方式有很多不同之处: ·MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前 Unix用户名作为MySQL用户名登录,但是这仅仅为了方便。客户程序允许用-u或--user选项指定一个不同的名字,这意味着无论如何你不能使得一个...
一个重要的应用就是如何在遗忘root用户密码的时候修改密码,使用的方法是启动MySQL服务器时忽略加载授权表。 由MySQL使用用户名和口令的方法与Unix或Windows使用的方式有很多不同之处: ·MySQL 使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前 Unix用户名作为MySQL用户名登录,...
如果遇到下述错误,表示当启动mysqld时或重新加载授权表时,在用户表中发现具有非法密码的账户。 发现用户’some_user’@’some_host’密码错误:忽略用户。 作为其结果,许可系统将简单忽略账户。 在下面的介绍中,指明了可能的原因和问题的更正措施: 1.或许,你正打算用旧的用户表运行新版本的mysqld。执行mysqlsh...

经验教程

982

收藏

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