关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » MySQL »MySQL的用户设置与授权

    MySQL的用户设置与授权

    2015-08-01 00:00:00 出处:ITJS
    分享

    微信扫一扫:分享

    Scan me!

    微信里点“发现”,扫一下

    二维码便可将本文分享至朋友圈。

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

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

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

    语法:SHOW GRANTS FOR user_name

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

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

    mysql>SHOW 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。

    ·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权限的用户,因为具有不同权限的两个用户也许能合并权限!

    创建用户并授权的实例

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

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

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

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

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

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

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

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

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

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

    该语句将在user表中为anyname@localhost创建一个记录,打开所有权限,因为这里是超级用户(全局)权限存储的地方,要用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 flush@localhost 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 boris@localhost 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"。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。