网络编程
位置:首页>> 网络编程>> 数据库>> MySQL应用技巧之存取权限

MySQL应用技巧之存取权限

 来源:Asp之家 发布时间:2010-08-08 09:10:00 

标签:mysql,技巧,权限

MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用户名作为MySQL用户名登录,但是这仅仅为了方便,客户程序允许用-u或--user选项指定一个不同的名字。及与安全的考虑,所有的MySQL用户名都应该有口令。

1. MySQL 用户名和口令

* MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用户名作为MySQL用户名登录,但是这仅仅为了方便,客户程序允许用-u或--user选项指定一个不同的名字。及与安全的考虑,所有的MySQL用户名都应该有口令。

* MySQL用户名最长可以是16各字符;典型地,Unix用户名限制为8个字符。

* MySQL口令与Unix口令没关系。

* MySQL加密口令使用了一个Unix登录期间所用的不同算法,PASSWORD()和ENCRYPT()

函数PASSWORD(str)

从纯文本口令str计算一个口令字符串。该函数被用于为了在user授权表的Password列中存储口令而加密MySQL口令。

mysql> select PASSWORD('badpwd');

-> '7f84554057dd964b'

PASSWORD()加密是非可逆的。PASSWORD()不以与Unix口令加密的相同的方法执行口令加密。你不应该假定如果你的Unix 口令和你的MySQL口令是一样的,PASSWORD()将导致与在Unix口令文件存储的相同的加密值。见ENCRYPT()。

ENCRYPT(str[,salt])

使用Unix crypt()系统调用加密str。salt参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,salt可以长于2个字符。)

mysql> select ENCRYPT("hello");

-> 'VxuFAJXVARROc'

如果crypt()在你的系统上不可用,ENCRYPT()总是返回NULL。ENCRYPT()只保留str起始8个字符而忽略所有其他,至少在某些系统上是这样。这将由底层的crypt()系统调用的行为决定。

1. 与MySQL服务器连接

语法格式:

shell> mysql [-h host_name][-u user_name][-pyour_pass ]

-h, -u和-p选项的另一种形式是--host=host_name、--user=user_name和--password=your_pass。

注意:在-p或--password=与跟随它后面的口令之间没有空格。(在命令行上指定一个口令是不安全的!)

对于命令行没有的联接参数,mysql使用缺省值:

* 缺省主机名是localhost。

* 缺省用户名是你的Unix登录名。

* 如果没有-p,则没有提供口令。

缺省值参数的指定:

在你的主目录下“.my.cnf”的配置文件的[client]小节里指定连接参数:

[client]

host=host_name

user=user_name

password=your_pass

注:命令行上被指定的值优先于在配置文件和环境变量中指定的值

最安全的方法是让客户程序提示口令或在一个适当保护的“.my.cnf”文件中指定口令。

1. MySQL提供的权限

权限   列   上下文

select Select_priv 表

insert Insert_priv 表

update Update_priv 表

delete Delete_priv 表

index Index_priv 表

alter Alter_priv 表

create Create_priv 数据库、表或索引

drop Drop_priv 数据库或表

grant Grant_priv 数据库或表

references References_priv 数据库或表

reload Reload_priv 服务器管理

shutdown Shutdown_priv 服务器管理

process Process_priv 服务器管理

file File_priv 在服务器上的文件存取

注:grant权限允许你把你自己拥有的那些权限授给其他的用户。

file权限给予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读和写服务器上的文件,任何被授予这个权限的用户都能读或写MySQL服务器能读或写的任何文件。

2. 存取控制:连接证实

身份检查使用user表3个(Host, User和Password)范围字段。服务器只有在一个user表条目匹配你的主机名和用户名并且你提供了正确的口令时才接受连接。

注:一个Host值可以是主机名或一个IP数字,或'localhost'指出本地主机。 可以在Host字段里使用通配符字符“%”和“_”。 Host值'%'匹配任何主机名。当一个连接被尝试时,服务器浏览排序的条目并使用找到的第一个匹配。

普遍的误解是认为,对一个给定的用户名,当服务器试图对连接寻找匹配时,明确命名那个用户的所有条目将首先被使用。这明显不是事实。

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

0
投稿

猜你喜欢

  •  1. 得到安全字符串,在查询中使用,过滤单引号。Function Get_SafeStr(str)  &nb
  • 在许多情况下,当迁移至SQL Server 2008之前必须了解那些反对和放弃功能的具体情况。下文是几个主要功能在兼容性上的问题列表:1.S
  • 在开发 图像 动画 游戏 相关的程序时, 双缓冲( double-buffer )一直是程序员常用(必用)的技巧. 当然 随着各种引擎 框架
  • 1. 用Dreamweaver 4.0轻松设计会自动弹性调整的网页 首先需要保证的是你的页面内容采用了表格的格式,然后打开你要编辑的页面,按
  • 今天下午,低一度博客受到攻击了,出现了大约一个小时的访问异常。庆幸的是,这帮无耻歹徒没能成功获取我的Access数据库,而只是象征性地给我注
  • 让ASP搭配MYSQL所需要工具mysql-4.1.11-win32 myodbc-3.51.11-1-dll myodbc-3.51.11
  • 在jQuery的官方文档中,提示用户这是一个低级的方法,应该用.data()方法来代替。$.data( element, key, valu
  • 自己从工艺品设计到平面设计到网络设计,虽然设计原则不离其宗,但经验下来的心得告诉自己,设计媒介的变化带来很多媒介自身的特殊性,下面总结下网站
  • 用字符串就可以轻松地获取每一个文件的名称和扩展名,但不要乱用:<%Function getFilename(text)tex
  • Windows 8 终于发布了,虽然现在可用的只是开发者预览版,好消息是,IE 10 也随着发了,虽然现在还只有Windows 8可用。我们
  • 今年4月,我在宿舍憋出一个拖拽翻页效果原本是为自己的博客网站设计的,周二产生的灵感,周三周四逃课两天算坐标,周五回家,到傍晚才算写出了第一版
  • 当你加入到一个项目,相关的CSS文件可能会看得你头昏眼花。时间一长,修改了哪些内容,增加了哪些内容,也都弄不清,维护成本相当的高。正好我们国
  • 本教程将分步讲解如何使用JQuery和CSS打造一个炫酷动感菜单。jQuery的"write less, do more"
  •  我的机器不知为何,安装MySQL的时候,一到配置那一步就无休止的等待,只好结束任务,然而启动MySQL的时候出现1067错误提示
  • 使用SQL Server事件探查器工具,你可用一个捕获到的跟踪来收集有关服务器的重要信息。与索引优化向导(Index Tuning Wiza
  • 举例如下:<HTML>    <HEAD>   
  • 在一些网页应用中,就比如在投票系统中,当我们进行的是多项投票时,我们要求用户最多只能选择几项进行投票,这也是就是说选择复选框的个数最多几个.
  • Microsoft SQL Server 2000复制的概念:在数据库之间对数据和数据库对象进行复制和分发并进行同步以确保其一致性的一组技术
  • 此文刊登在《程序员》三月期,有删改提到安全问题,首先想到应付这些问题的应该是系统管理员以及后台开发工程师们,而前端开发工程师似乎离这些问题很
  • 一.权限表mysql数据库中的3个权限表:user 、db、 host权限表的存取过程是:1)先从user表中的host、 user、 pa
手机版 网络编程 asp之家 www.aspxhome.com