1:给mysql添加用户的方法有两种

grant all privileges on *.* to 'monoty'@'localhost' identified by 'some_pass' with grant option;

grant all privileges on *.* to 'monty'@'%' identified by 'some_pssword' with grant option;

2:直接到数据库中插入用户

INSERT INTO user

VALUES('localhost','monty',PASSWORD('some_pass'),

'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

user的数据表的字段问题

host

user

password password('密码')

select_priv

insert_priv

update_priv

delete_priv

create_priv

drop_priv

reload_priv

shutdown_priv

process_priv

File_priv

grant_priv

references_priv

index_priv

alter_priv

show_db_priv

super_priv

create_tmp_table_priv

lock_tables_priv

execute_priv

repl_client_priv

create_view_priv

show_view_priv

create_routine_priv

alter_routine_priv

create_user_priv

event_priv

trigger_priv

create_tablespace_priv

ssl_type

ssl_cipher

x509_issuser

x509_subject

max_questions

max_updates

max_connections

max_user_connections

plugin

authentication_string

A,mysql中添加某个用户的两种操作方法:

1,最安全,最方便的做法,也是最最推荐的做法是使用grant操作,grant的语法

如下所示:

GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost IDENTIFIED

BY

'some_pass' WITH GRANT

OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'some_pass'

WITH

GRANT OPTION;

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

GRANT USAGE ON *.* TO 'dummy'@'localhost';

其中授予的权利,主要有以下几方面:

SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

上面所述的 all privileges 表示把所有权利都赋予了那个用户。

2, 也可以直接在mysql 默认的数据库下面,表user中去插入相关的记录。这里,

mysql的manual中给出了几个例子。

INSERT INTO user

VALUES('localhost','monty',PASSWORD('some_pass'),

'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

这里需要注意的是,这里有多少个Y。上面这个语句相当与 grant all

privileges on *.* to 'monty' identified by 'some_pass'.

这里要注意,如

果不显示指定某一个特权为‘Y’,mysql的默认值是'N'

对于admin账户来说,还可以使用扩展的insert语句进行操作,例子如下:

INSERT INTO user SET

Host='localhost',User='admin',Reload_priv='Y',

Process_priv='Y';

3,mysqlmanual中给出了这样一种授权的方式:

INSERT INTO user (Host,User,Password) VALUES

('localhost','custom',PASSWORD('obscure'));

mysql>INSERT INTO user (Host,User,Password) VALUES

('whitehouse.gov','custom',PASSWORD('obscure'));

mysql>INSERT INTO user (Host,User,Password) VALUES

('server.domain','custom',PASSWORD('obscure'));

mysql>INSERT INTO

db(Host,Db,User,Select_priv,Insert_priv,

Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES

('localhost','bankaccount','custom',

'Y','Y','Y','Y','Y','Y');

mysql>INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,

Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES

('whitehouse.gov','expenses','custom',

'Y','Y','Y','Y','Y','Y');

mysql>INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,

Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES

('server.domain','customer','custom', 'Y','Y','Y','Y','Y','Y');

mysql>FLUSH PRIVILEGES;

这样,先授权连接权限,然后再授权各个数据库的操作权限。这里需要注意的是

,在每次授权之后,都需要执行flush privileges,这个操作的目的是,通知

mysql将新的授权表重新加载到内存中去。

----------------------------------------------------------------------

B,长话短说,以下是几个数据库权限方面的几个常用命令:

1, 添加某个账户时候,顺便加上的数据库连接权限,

GRANT ALL ON customer.* TO 'francis'@'localhost' IDENTIFIED

BY 'frank'

WITH MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10

MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2;

2,为某个账户设置密码:

SET PASSWORD FOR 'jeffrey'@'%' =

PASSWORD('biscuit');

3,更改某个账户的密码:

UPDATE user SET Password = PASSWORD('bagel')

->WHERE Host = '%' AND User = 'francis';

4,查看某个用户被授予了哪些权限?

mysql>SHOW GRANTS FOR 'bob'@'pc84.example.com';

---------------------------------------------------------------------

C,mysql核查用户身份,是怎么核查的?

user表范围列决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的

权限指出用户的全局(超级用户)权限。这些权限适用于服务器上的all数据库。

db表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。

授予的数据库级别的权限适用于数据库和它的表。

当你想要一个给定的db表行应用于若干主机时,db和host表一起使用。例如,如

果你想要一个用户能在你的网络从若干主机使用一个数据库,在用户的db表行的

Host值设为空值,然后将那些主机的每一个移入host表

有一些事情你不能用MySQL权限系统做到:

你不能明显地指定某个给定的用户应该被拒绝访问。即,你不能明显地匹配用户

然后拒绝连接。你不能指定用户有权创建立或删除数据库中的表,但不能创建或

删除数据库本身。

Mysql 中host字段和user字段的特殊规定:

既然你能在Host字段使用IP通配符值(例如,'144.155.166.%'匹配在一个子网上

的每台主机),有可能某人可能企图探究这种能力,通过命名一台主机为

144.155.166.somewhere.com。为了阻止这样的企图,MySQL不允许匹配以数字和

一个点起始的主机名,这样,如果你用一个命名为类似1.2.foo.com的主机,它的

名字决不会匹配授权表中的Host列。只有一个IP数字能匹配IP通配符值。

通配符字符在User列中不允许,但是你能指定空的值,它匹配任何名字。如果

user表匹配的连接有一个空用户名,用户被认为是匿名用户(没有名字的用户),

而非客户端实际指定的名字。这意味着一个空的用户名被用于在连接期间的进一

步的访问检查(即,在阶段2期间)。

Password列可以是空的。这不是通配符,也不意味着匹配任何密码,它意味着用

户必须不指定一个密码进行连接。

D,Mysql中如何进行用户身份的判断?

当服务器读取表时,它首先以最具体的Host值排序。主机名和IP号是最具体

的。'%'意味着“任何主机”并且是最不特定的。有相同Host值的条目首先以最具

体的User值排序(空User值意味着“任何用户”并且是最不特定的)。

普遍的误解是认为,对给定的用户名,当服务器试图对连接寻找匹配时,明确命

名那个用户的所有条目将首先被使用。这明显不符合事实。先前的例子说明了这

点,在那里由jeffrey从thomas.loc.gov的连接没被包含'jeffrey'作为User列值

的行匹配,但是由没有用户名的题目匹配!结果是,jeffrey被鉴定为匿名用户,

即使他连接时指定了用户名。

E,Mysql对于已经连接的用户,对与用户执行的指令,如何进行鉴权判断?

user表在全局基础上授予赋予你的权限,该权限不管当前的数据库是什么均适用

。例如,如果user表授予你DELETE权限, 你可以删除在服务器主机上从任何数据

库删除行!换句话说,user表权限是超级用户权限。只把user表的权限授予超级

用户如服务器或数据库主管是明智的。对其他用户,你应该把在user表中的权限

设成'N'并且仅在特定数据库的基础上授权。你可以为特定的数据库、表或列授权

----