Mysql必读MySQL用户设置与授权实例详解
《Mysql必读MySQL用户设置与授权实例详解》要点: 介绍下mysql数据库中如何建立用户,如何为用户分配权限. 这样可以更精确的控制授权,能够对授权表完全了解,避免因为 GRANT语句的错误,是MySQL服务器的平安性降低.MYSQL应用 有2个不同的办法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表.比较好的办法是使用GRANT语句,因为他们是更简明并且好像错误少些.MYSQL应用 使用SHOW GRANTS语句显示用户的授权MYSQL应用 可以直接查看授权表,也可以使用SHOW GRANTS语句查看某个用户的授权,这种情况下使用SHOW GRANTS语句显然要方便一些.MYSQL应用 语法:SHOW GRANTS FOR user_nameMYSQL应用 为了容纳对任意主机的用户授予的权利,MySQL支持以格式指定user_name值.MYSQL应用 例如,显示一个用户admin的权限: 其结果为创建该用户的GRNAT授权语句: 暗码是加密后的形式.MYSQL应用 使用GRANT语句创建用户并授权MYSQL应用 GRANT语句的语法 ON what TO user IDENTIFIED BY “password” WITH GRANT OPTION 要使用该语句,需要填写以下部分: ALTER?????????????? INDEX?????????????? SELECT CREATE???????????? INSERT????????????? SHUTDOWN DELETE????????????? PROCESS???????????? UPDATE DROP??????????????? REFERENCES????????? USAGE ALL是ALL PRIVILEGES的一个同义词,REFERENCES还没被实现,USAGE当前是“没有权限”的一个同义词.它能用在想要创建一个没有权限用户的时候.MYSQL应用 对于表,能指定的唯一priv_type值是SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、INDEX和ALTER.MYSQL应用 对于列,能指定的唯一priv_type值是(即,当使用一个column_list子句时)是SELECT、INSERT和UPDATE.MYSQL应用 ·columns 权限适用的列.MYSQL应用 这是可选的,只来设置列专有的权限.如果命名多于一个列,则用逗号分开.MYSQL应用 ·what 权限应用的级别MYSQL应用 GRANT允许系统主管在4个权限级别上授权MySQL用户的权利:MYSQL应用 ·全局级别MYSQL应用 全局权限作用于一个给定服务器上的所有数据库.这些权限存储在mysql.user表中. 能通过使用ON *.*语法设置全局权限MYSQL应用 ·数据库级别MYSQL应用 数据库权限作用于一个给定数据库的所有表.这些权限存储在mysql.db和mysql.host表中. 能通过使用ON db_name.*语法设置数据库权限.如果指定ON *并且有一个当前数 ·表级别MYSQL应用 表权限作用于一个给定表的所有列.这些权限存储在mysql.tables_priv表中.能透过 ON tbl_name,为具体的表名设置权限.MYSQL应用 ·列级别MYSQL应用 列权限作用于在一个给定表的单个列.这些权限存储在mysql.columns_priv表中.可以通过指定一个columns子句将权限授予特定的列,同时要在ON子句中指定具体的表.MYSQL应用 对与一个表或列的权限是由4个权限级别的逻辑或形成的.例如,如果mysql.user表指定一个用户有一个全局select权限,它不能被数据库、表或列的一个条目否认.MYSQL应用 对于一个列的权限能如下计算: OR (database privileges AND host privileges) OR table privileges OR column privileges 在大多数情况下,只授予用户一个权限级别上的权限,因此现实通常不象上面所说的那样复杂.MYSQL应用 user 使用权限的用户.MYSQL应用 为了容纳对任意主机的用户授予的权利,MySQL支持以格式指定user_name值.如果想要指定一个特殊字符的一个user字符串(例如“-”),或一个包括特殊字符或通配符的host 能在主机名中指定通配符.例如,"适用于在loc.gov域中任何主机的user,并且"适用于在144.155.166类 C 子网中任何主机的user.MYSQL应用 简单形式的user是"的一个同义词.MYSQL应用 注意:如果允许匿名用户连接MySQL服务器(它是缺省的),也应该增加所有本地用户如,因为否则,当用户试图从本地机器上登录到MySQL服务器时,对于mysql.user表中的 ·password 分配给该用户的口令.这也是可选的.MYSQL应用 在MySQL 3.22.12或以后,如果创建一个新用户或如果有全局授予权限,用户的口令将被设置为由IDENTIFIED BY子句指定的口令,如果给出一个.如果用户已经有了一个口 警告:如果创造一个新用户但是不指定一个IDENTIFIED BY子句,用户没有口令.这是不平安的.MYSQL应用 ·WITH GRANT OPTION子句是可选的.MYSQL应用 WITH GRANT OPTION子句给与用户有授予其他用户在指定的权限水平上的任何权限的能力.应该谨慎对待授予他grant权限的用户,因为具有不同权限的两个用户也许能合并 创建用户并授权的实例MYSQL应用 创建一个具有超级用户权利的用户: 该语句将在user表中为创建一个记录,打开所有权限.MYSQL应用 数据库级权限用一个ON db_name.*子句而不是ON *.*进行授权: 这些权限不是全局的,所以它们不存储在user表中,我们仍然需要在user表中创建一条记录(使得用户能连接),但我们也需要创建一个db表记录记录数据库集的权限.MYSQL应用 直接修改授权表创建用户并授权MYSQL应用 如果还记得前面的介绍,应该能即使不用GRANT语句也能做GRANT做的事情.记住在直接修改授权表时,将通知服务器重载授权表,否则他不知道的改变.可以执行一个 下列GRANT语句创建一个拥有所有权的超级用户.MYSQL应用 包含授权给别人的能力: 该语句将在user表中为创建一个记录,打开所有权限,因为这里是超级用户(全局)权限存储的地方,要用INSERT语句做同样的事情,语句是: "Y","Y","Y") 可能发现它不工作,这要看的MySQL版本.授权表的结构已经改变而且在的user表可能没有14个权限列.用SHOW COLUMNS找出的授权表包括的每个权限列,相应地调整的 本例的INSERT语句比前一个简单,它很容易列出列名并只指定一个权限列.所有其它列将设置为缺省的"N": 数据库级权限用一个ON db_name.*子句而不是ON *.*进行授权: 这些权限不是全局的,但我们也需要创建一个db表记录记录数据库集权限: -> VALUES("localhost","boris",PASSWORD("ruby")) ; mysql> INSERT INTO db VALUES -> ("localhost","sample_db","N","Y"); "N"列是为GRANT权限;对末尾的一个数据库级具有WITH GRANT OPTION的GRANT语句,要设置该列为"Y".MYSQL应用 要设置表级或列级权限,对tables_priv或columns_priv使用INSERT语句. 设置tables_priv.Table_priv或columns_priv.Column_priv列来设置包括想启用的权限值. 《Mysql必读MySQL用户设置与授权实例详解》是否对您有启发,欢迎查看更多与《Mysql必读MySQL用户设置与授权实例详解》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |