在MySQL中创建新用户,并授予其对一个数据库的完全访问权限

8yparm6h  于 2022-10-31  发布在  Mysql
关注(0)|答案(9)|浏览(211)

我想在MySQL中创建一个新用户,并只授予它对一个数据库(例如dbTest)的完全访问权限,我使用create database dbTest;之类的命令创建了这个数据库。

aurhwmvo

aurhwmvo1#

请尝试以下操作创建用户:

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'-如您所猜,这会设定该使用者的密码。

dzjeubhm

dzjeubhm2#

语法

要在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';

其中,ALLpriv_type)可以替换为特定权限,如SELECTINSERTUPDATEALTER等。
然后,要重新加载新分配的权限,请运行:

FLUSH PRIVILEGES;

正在执行

要运行上述命令,您需要运行mysql命令并在提示符中键入这些命令,然后通过quit命令或Ctrl-D注销。
要从shell运行,请使用-e参数(将SELECT 1替换为上述命令之一):

$ mysql -e "SELECT 1"

或从标准输入打印语句:

$ echo "FOO STATEMENT" | mysql

如果您在上面得到了 Access denied,请指定-u(用于用户)和-p(用于密码)参数,或者对于长期访问,请在~/.my.cnf中设置凭据,例如:

[client]
user=root
password=root

外壳集成

对于不熟悉MySQL语法的人来说,这里有一些方便的shell函数,它们很容易记住和使用(要使用它们,您需要加载下面包含的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

要使用上面的命令,你需要将下面的函数复制并粘贴到你的 rc 文件中(例如.bash_profile),然后重新加载你的shell或源文件。在这种情况下,只需输入source .bash_profile


# Create user in MySQL/MariaDB.

mysql-create-user() {
  [ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
  mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}

# Delete user from MySQL/MariaDB

mysql-drop-user() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
  mysql -ve "DROP USER '$1'@'localhost';"
}

# Create new database in MySQL/MariaDB.

mysql-create-db() {
  [ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
  mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}

# Drop database in MySQL/MariaDB.

mysql-drop-db() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
  mysql -ve "DROP DATABASE IF EXISTS $1"
}

# Grant all permissions for user for given database.

mysql-grant-db() {
  [ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
  mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
  mysql -ve "FLUSH PRIVILEGES"
}

# Show current user permissions.

mysql-show-grants() {
  [ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
  mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}

注意:如果您不希望在Bash历史记录中留下痕迹(如密码),请检查:How to prevent commands to show up in bash history?

5cg8jx4n

5cg8jx4n3#

创建用户并授予对数据库的所有权限。

登录MySQL:

mysql -u root

现在创建并授予

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

匿名用户(仅用于本地测试)

或者,如果您只想授予对数据库的完全无限制访问权限(例如,在本地计算机上的测试示例),则可以授予匿名用户访问权限,如下所示:

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

注意

这对于开发中的垃圾数据是很好的。不要对你关心的任何东西这样做。

o3imoua4

o3imoua44#

$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

忽略**-p选项,如果mysql用户没有密码**只需按“[Enter]”按钮绕过。用大括号括起来的字符串需要替换为实际值。

gj3fmq9x

gj3fmq9x5#

您可以使用CREATE USER语句创建新用户,并使用GRANT为他们给予权限.

5rgfhyps

5rgfhyps6#

对我来说,这很管用。

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

其中

  • spowner:用户名
  • 第1234章:一个女人
  • 测试:数据库'spowner'具有访问权限
hujrc8aj

hujrc8aj7#

下面的命令将工作,如果你想创建一个新的用户给予他所有的访问一个特定的数据库(不是所有的数据库在您的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';
gtlvzcf8

gtlvzcf88#

如果省略了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'
1zmg4dgp

1zmg4dgp9#

尝试使用Windows计算机上运行的MySQL WorkbenchMyQL上创建数据库时遇到此问题。
下面的命令在Linux机器MySQL CLI上有效:

CREATE DATABASE my-database ;
USE my-database ;
GRANT ALL PRIVILEGES ON 'my-database'.* TO 'my_user'@'%' IDENTIFIED BY 'my-password' ;

但是在Windows机器上运行的MySQL Workbench上不起作用。我不得不改用下面的命令。请注意

`

符号和

'

在以下命令中使用:

CREATE DATABASE `my-database` ;
USE `my-database` ;
GRANT ALL PRIVILEGES ON `my-database`.`*` TO `my_user`@`%` IDENTIFIED BY 'my-password' ;

CREATE SCHEMA `my-database` ;
USE `my-database` ;
GRANT ALL PRIVILEGES ON `my-database`.`*` TO `my_user`@`%` IDENTIFIED BY 'my-password' ;

相关问题