mysql用户权限设置

摘要:
//Www.cnblogs.com/bangbangjiang/p/3566388.html通常,我们使用sqlyog等工具以图形方式管理MySQL数据库上的数据。我们需要创建不同的用户帐户来分配不同的权限。您只能查询玩家数据库;测试人员只能查询配置数据库,并有权修改玩家数据库;它包括以下项(有关更多权限,您可以查看MySQL数据库中用户表的列):

转载请说明出处:博客园--邦邦酱好 http://www.cnblogs.com/bangbangjiang/p/3566388.html

通常我们会使用sqlyog等图形化管理MYSQL数据库的工具来管理mysql上的数据。当很多人同时通过sqlyog来访问数据库时,我们就需要创建不同的用户账户来分配不同的权限。

比如在某些游戏测试中,策划需要对配置库拥有修改的权限,对玩家数据库只能拥有查询的权限;测试人员对配置库只能有查询的权限,对玩家数据库拥有修改的权限;开发对配置库和玩家数据库都要有查询,修改的权限。当然了,这些权限需要看整个游戏的架构是怎么处理的再来决定权限。

那么我们先来学学用户账号设置的一些问题。

一.创建账户

(注意:创建前需要先进入mysql数据库中,"use mysql")

语法是这样的:GRANT privileges(columns) ON databases_name.tables TO user_name@host IDENTIFIED BY password WITH GRANT OPTION;

1.privileges:授予用户的权限。它包括下面几项(更多的权限可以查看mysql数据库下的user表的列):

      Alter (修改表和索引 )

  Create(创建数据库和表 )
  Delete (删除表中已有的记录 )
  Drop (抛弃(删除)数据库和表 )
  INDEX (创建或抛弃索引 )
  Insert ( 向表中插入新行 )
  REFERENCE (未用 )
  Select (检索表中的记录 )
  Update ( 修改现存表记录 )
  FILE (读或写服务器上的文件 )
  PROCESS ( 查看服务器中执行的线程信息或杀死线程 )
  RELOAD (重载授权表或清空日志、主机缓存或表缓存。)
  SHUTDOWN(关闭服务器 )
  ALL (所有;ALL PRIVILEGES同义词 )
  USAGE (特殊的“无权限”权限)

2.columns:权限运用的列,它是可选的,并且你只能设置列特定的权限。如果命令有多于一个列,应该用逗号分开它们;

3.databases_name:权限运用的级别。权限可以是全局的(适用于所有数据库和所有表)、特定数据库(适用于一个数据库中的所有表)或特定表的。

4.user_name:权限授予的用户,它由一个用户名和主机名组成(如test@localhost,mm@192.168.0.122)。在MySQL中,你不仅指定谁能连接,还有从哪里连接。这允许你让两个同名用户从不同地方连接。 MySQL让你区分他们,并彼此独立地赋予权限。MySQL中的一个用户名就是你连接服务器时指定的用户名,该名字不必与你的Unix登录名或 Windows名联系起来。缺省地,如果你不明确指定一个名字,客户程序将使用你的登录名作为MySQL用户名。这只是一个约定。你可以在授权表中将该名字改为nobody,然后以nobody连接执行需要超级用户权限的操作。

5.password:赋予用户的口令,它是可选的。如果你对新用户没有指定IDENTIFIED BY子句,该用户不赋给口令(不安全)。对现有用户,任何你指定的口令将代替老口令。如果你不指定口令,老口令保持不变,当你用IDENTIFIED BY时,口令字符串用改用口令的字面含义,GRANT将为你编码口令,不要你用SET PASSWORD 那样使用password()函数。

6.WITH GRANT OPTION:这是可选的,写上它就是允许你所创建的这个用户把他拥有的那些权限授给其他的用户。可以用于数据库、表和保存的程序

下面来创建一个名为tester,密码为123,并且只能对peizhi库进行查询操作的账户:

    mysql> grant select on peizhi.* to tester@localhost identified by "123" with grant option;

这样你就可以使用账号tester,密码123来登陆peizhi库了:

mysql用户权限设置第1张

(登陆之后你会发现tester用户只能看到peizhi这个数据库,其他库是看不到的,root用户却可以看到全部的数据库。)

如果tester用户试图修改peizhi库里的数据,sqlyog就会提示:

mysql用户权限设置第2张

它告诉你,你没有权限修改表。

  具体需要授予什么权限就要根据实际情况判断了。

当我们grant之后,打开mysql库下的user表就会发现多了一行记录:

mysql用户权限设置第3张

二.删除

  (1)取消一个用户的权限,可以使用revoke语句:REVOKE privileges(columns) ON databases_name.tables FROM user_name@host;

可以仅取消部分权限,它只删除权限,不删除用户,只要在user表中有这个用户的记录,即使权限都没了,这个用户仍然可以连接服务器。

  (2)删除一个用户:手动地修改(使用INSERTUPDATEDELETE等等)授权表(user表),如:delete from user where user="tester";删除了tester这个账户,你应该执行 flush privileges(也有可能是mysqladmin flush-privilegesmysqladmin reload告诉服务器再装载授权表,否则你的更改将不会生效,除非你重启服务器。

  更改无效的意思是:tester这个用户还是能够使用sqlyog登陆数据库进行操作,只有flush之后,这个用户才会真正失效,无法访问数据库。

三.讨论几个问题

1.访问控制:谁能连接,从哪里连接

  当你试图连接MySQL服务器时,服务器基于你的身份以及你是否能通过供应正确的密码验证身份来接受或拒绝连接。如果不是,服务器完全拒绝你的访问身份基于2个信息:(1)你从哪个主机进行连接,对应于user表的host字段;(2)你的mysql用户名,对应于user表的name字段

  它们是这句“GRANT privileges(columns) ON databases_name.tables TO user_name@host IDENTIFIED BY password;”;里的“user_name@host”

  身份检查使用3个user表(Host, User和Password)范围列执行,服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接。
host可以有很多种描述:

  (1)允许任何主机以max的用户名进行连接:%(通配符),比如:max@% (它等价于max)。这是最简单的建立用户方式,但是也是最不安全的。

  (2)允许一个受限的主机集合以max的用户名进行连接,比如:max@%.snake.net,从snake.net域的任何主机。

  (3)允许某个IP地址的用户以max的用户名进行连接,比如:

    max@192.168.128.5(特定主机),

    max@192.168.128.%(C类子网),

    max@192.168.128.0/15(15位网络号并匹配具有192.168.128头的IP地址)

2.权限控制

  (1)对用户:WITH GRANT OPTION子句允许你把访问授权的权利授予另一个用户。要注意,拥有GRANT权限的两个用户可以彼此授权。如果你只给予了第一个用户Select权 限,而另一个用户有GRANT加上Select权限,那么第二个用户可以是第一个用户更“强大”。
  (2)对数据库:

    全局权限是最强大的,因为它们适用于任何数据库。

    “GRANT privileges(columns) ON databases_name.tables TO user_name@host IDENTIFIED BY password;“里的databases_name设为:*.*即可。

    仅对某个库:databases_name.tables设为:database_name.*

    仅对某个表的某个列:GRANT Select ON peizhi.member TO tester@localhost INDETIFIED BY "123";

                            GRANT Update (id,name) ON peizhi.member TO tester@localhost;

更多的资料可以参阅mysql的使用手册:访问权限系统。

免责声明:文章转载自《mysql用户权限设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AlertDialog使用WIC组件转换图片格式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Synchronization N层 使用WebService同步SQLCompact

Synchronization N层使用WebService同步SQLCompact 使用Synchronization做与web service进行数据库同步。 Sync同步非常强大,可以同步不同地点的数据库中的数据。 说明:本案例使用微软的经典数据库示例NorthWind,数据库系统使用 MSSQL Express 步骤: 1.使用VS20...

将 excel文件数据导入MySQL数据库中

    第一步:先将Excel文件另存为文本文件(制表符分割) 第二步:将生成的txt文件另存,并修改编码格式utf8; 第三步:将文件放到指定位置,或自己想要的位置: G:city.txt 第四步:避免创建数据库及表出现中文乱码和查看编码方法: 1、创建数据库的时候:CREATE DATABASE `test` CHARACTER SET 'utf8...

【sql server镜像】SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)

SQL SERVER 基于数据库镜像的主从同步 Author:chaoqun.guocreatetime:2019-03-26 1、概念 1.1、服务器概念 ◆ 主体服务器(Principal Server) 其中一个实例为客户端提供服务,这个实例称为"主体服务器"。该服务器"扮演"主体角色",其数据库副本为当前的"主体数据库"。 ◆ 镜像服务器(Mirr...

Centos7 安装与破解 Confluence 6.7.1

1.1硬件需求建议: CPU:32/64 bit 2.27GHz双核心以上之CPU; 内存:8GB以上; 硬盘:300GB,7200转以上; 建议数据库、Confluence等各自独立一台服务器(本测试环境都安装在1台VM)。 1.2软件环境 Centos 7.x mariadb 5.5.56 1.3. 安装包下载 链接: https://pan...

ASP.NET中的状态—基于服务器端的状态管理Session(二)

  前言   我们在前篇“ASP.NET温故而知新学习系列之ASP.NET中的状态—1-状态管理概述”中讲到HTTP协议是个“无状态”的协议,当你从一个页面跳转到另外一个页面,它是不会保存数据的,但是我们需要数据如何从一个页面传递到另一个页面,以及在好多页面当中共享一些数据,为了允许用户通过请求保存状态信息,ASP.NET提供了Session存储机制,这些...

第六章 使用ADO.NET查询和操作数据

1、StringBuilder类——定义可变字符串 做到既重复修改,又不创建新的对象(与String类的区别) 常用方法: 1) Append()在结尾追加 2) Insert()在指定位置插入指定字符串 3) Remove()移除指定字符串 2、DataReader对象——用于读取数据库中的数据 DataReader 的主要成员:   3、使用...