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'并且仅在特定数据库的基础上授权。你可以为特定的数据库、表或列授权
。
----