我想在MySQL中创建一个新用户,并且只对一个数据库(比如dbTest
)提供完全访问权限,我使用create database dbTest;
之类的命令创建。那些MySQL命令会做什么?
答案 0 :(得分:771)
尝试此操作来创建用户:
CREATE USER 'user'@'hostname';
尝试此操作以授予其访问数据库dbTest
的权限:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
如果您正在运行在同一台计算机上访问MySQL的代码/站点,则hostname将是localhost。
现在,分解。
GRANT
- 这是用于创建用户和授予数据库,表等权限的命令。
ALL PRIVILEGES
- 这告诉用户将拥有所有标准权限。但是,这不包括使用GRANT命令的权限。
dbtest.*
- 这指示MySQL应用这些权限以在整个dbtest数据库中使用。如果愿意,可以用特定的表名或存储例程替换*。
TO 'user'@'hostname'
- “user”是您要创建的用户帐户的用户名。注意:您必须在那里有单引号。 'hostname'告诉MySQL用户可以连接的主机。如果您只需要来自同一台计算机,请使用localhost
IDENTIFIED BY 'password'
- 正如您所猜测的那样,这会为该用户设置密码。
答案 1 :(得分:263)
要在MySQL / MariaDB 5.7.6及更高版本中创建用户,请使用CREATE USER
syntax:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
然后授予对数据库的所有访问权限(例如my_db
),使用GRANT
Syntax,例如
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
ALL
( priv_type )可以替换为特定权限,例如SELECT
,INSERT
,UPDATE
,{{ 1}}等等
然后重新加载新分配的权限:
ALTER
要运行上述命令,您需要运行FLUSH PRIVILEGES;
命令并将其键入提示符,然后按mysql
命令注销或 Ctrl - D
要从shell运行,请使用quit
参数(将-e
替换为上述命令之一):
SELECT 1
或来自标准输入的打印声明:
$ mysql -e "SELECT 1"
如果你上面有访问被拒绝,请指定$ echo "FOO STATEMENT" | mysql
(对于用户)和-u
(对于密码)参数,或者为长期访问设置你的-p
中的凭据,例如
~/.my.cnf
对于不熟悉MySQL语法的人来说,这里有方便的shell函数,易于记忆和使用(要使用它们,你需要加载下面包含的shell函数)。
以下是示例:
[client]
user=root
password=root
要使用上述命令,您需要将以下功能复制并粘贴到 rc 文件中(例如.bash_profile
)并重新加载shell或获取文件。在这种情况下,只需输入$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'
$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo
$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES
$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'
$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'
$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo
:
source .bash_profile
注意:如果您不想在Bash历史记录中留下痕迹(例如密码),请检查:How to prevent commands to show up in bash history?
答案 2 :(得分:56)
登录MySQL:
mysql -u root
现在创建并授予
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
或者,如果您只想授予对数据库的完全无限制访问权限(例如,在本地计算机上为测试实例授予权限,则可以授予对匿名用户的访问权限,如下所示:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
这适用于开发中的垃圾数据。不要对你关心的任何事情这样做。
答案 3 :(得分:15)
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
忽略 -p 选项,如果mysql用户没有密码 或 ,只需按“[Enter]”按钮旁路即可。用大括号括起来的字符串需要用实际值替换。
答案 4 :(得分:13)
您可以使用CREATE USER语句创建新用户,并使用GRANT授予他们权限。
答案 5 :(得分:6)
对我来说这行得通。
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
其中
答案 6 :(得分:1)
如果您想创建一个新用户,则可以使用以下命令为他提供对本地主机上特定数据库(不是Mysql中的所有数据库)的所有访问权限。
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
这会将一个数据库test_database
(在您的情况下为dbTest
)的所有权限授予localhost上的该用户。
通过运行以下命令,检查上述命令向该用户发出的权限。
SHOW GRANTS FOR 'user'@'localhost'
以防万一,如果您想限制用户只能访问一个表
GRANT ALL ON mydb.table_name TO 'someuser'@'host';
答案 7 :(得分:0)
如果省略了host
部分,则默认为通配符%
,允许所有主机。
CREATE USER 'service-api';
GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'
SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'