建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 数据库 > Mysql 教程 >

MySQL存取权限 介绍(2)

时间:2010-08-04 00:01来源: 作者: 点击:
3. 存取控制:请求证实 一旦你建立了一个连接,服务器进入阶段2。对在此连接上进来的每个请求,服务器检查你是否有足够的权限来执行它,授权表用GRANT和REVOKE命令操作。 GRANT priv_type [(column_list)] [, priv_

  3. 存取控制:请求证实

  一旦你建立了一个连接,服务器进入阶段2。对在此连接上进来的每个请求,服务器检查你是否有足够的权限来执行它,授权表用GRANT和REVOKE命令操作。

  GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]

  ON {tbl_name | * | *.* | db_name.*}

  TO user_name [IDENTIFIED BY 'password']

  [, user_name [IDENTIFIED BY 'password'] ...]

  [WITH GRANT OPTION]

  REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...]

  ON {tbl_name | * | *.* | db_name.*}

  FROM user_name [, user_name ...]

  GRANT在MySQL 3.22.11或以后版本中实现。对于更早MySQL版本,GRANT语句不做任何事情。

  GRANT和REVOKE命令允许系统主管在4个权限级别上授权和撤回赋予MySQL用户的权利:

  全局级别

  全局权限作用于一个给定服务器上的所有数据库。这些权限存储在mysql.user表中。

  数据库级别

  数据库权限作用于一个给定数据库的所有表。这些权限存储在mysql.db和mysql.host表中。

  表级别

  表权限作用于一个给定表的所有列。这些权限存储在mysql.tables_priv表中。

  列级别

  列权限作用于在一个给定表的单个列。这些权限存储在mysql.columns_priv表中。

  user表权限是超级用户权限。只把user表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户,你应该把在user表中的权限设成'N'并且仅在一个特定数据库的基础上授权, 使用db和host表。

  4. 权限更改何时生效

  当mysqld启动时,所有的授权表内容被读进存储器并且从那点生效。

  用GRANT、REVOKE或SET PASSWORD对授权表施行的修改会立即被服务器注意到。

  如果你手工地修改授权表(使用INSERT、UPDATE等等),你应该执行一个FLUSH PRIVILEGES语句或运行mysqladmin flush-privileges告诉服务器再装载授权表,否则你的改变将不生效,除非你重启服务器。

  5. 建立初始的MySQL权限

  在安装MySQL后,你通过运行scripts/mysql_install_db安装初始的存取权限。包含下列权限集合:

  * MySQL root用户作为可做任何事情的一个超级用户。连接必须由本地主机发出。注意:出世的root口令是空的,因此任何人能以root而没有一个口令进行连接并且被授予所有权限。

  * 一个匿名用户,他可对有一个'test'或以'test_'开始的名字的数据库做任何时期事情,连接必须由本地主机发出。这意味着任何本地用户能连接并且视为匿名用户。

  * 其他权限被拒绝。例如,一般用户不能使用mysqladmin shutdown或mysqladmin processlist。

  为MySQL root用户指定一个口令(注意,你使用PASSWORD()函数指定口令):

  shell> mysql -u root mysql

  mysql> UPDATE user SET Password=PASSWORD('new_password')

  WHERE user='root';

  mysql> FLUSH PRIVILEGES;

  在MySQL 3.22和以上版本中,你可以使用SET PASSWORD语句:

  shell> mysql -u root mysql

  mysql> SET PASSWORD FOR root=PASSWORD('new_password');

  设置口令的另一种方法是使用mysqladmin命令:

  shell> mysqladmin -u root password new_password

  看看scripts/mysql_install_db脚本,看它如何安装缺省的权限。你可用它作为一个研究如何增加其他用户的基础

  为了完全重建权限表,删除在包含mysql数据库的目录下所有“*.frm”,“*.MYI”和“*.MYD”文件。(这是在数据库目录下面命名为“mysql”的目录,当你运行mysqld --help时,它被列出。)然后运行mysql_install_db脚本,可能在首先编辑它拥有你想要的权限之后。

  1. 向MySQL增加新用户权限

  增加用户2个不同的方法:

  通过使用GRANT语句或通过直接操作MySQL授权表。

  比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。

  shell> mysql --user=root mysql

  mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost

  IDENTIFIED BY 'something' WITH GRANT OPTION;

  mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"

  IDENTIFIED BY 'something' WITH GRANT OPTION;

  mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;

  mysql> GRANT USAGE ON *.* TO dummy@localhost;

  monty

  可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令('something'做这个。注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。

  admin

  可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。

  dummy

  可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为'N'--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。

  也可以直接通过发出INSERT语句增加同样的用户存取信息,然后告诉服务器再次装入授权表:

  shell> mysql --user=root mysql

  mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),

  'Y','Y','Y

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片