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

我想在MySQL中创建一个新用户,并仅为一个数据库(比如说dbTest提供完全访问权限,并使用create database dbTest;等命令create database dbTest; 。 MySQL命令会做什么?


试试这个来创建用户:

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' - 正如你所猜测的那样,这为该用户设置了密码。


句法

要在MySQL / MariaDB 5.7.6及更高版本中CREATE USER ,请使用CREATE USER语法:

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)都可以用SELECTINSERTUPDATEALTER等特定权限替换。

然后重新加载新分配的权限运行:

FLUSH PRIVILEGES;

执行

要运行上述命令,您需要运行mysql命令并将它们输入到提示符中,然后使用quit命令或Ctrl-D进行注销。

要从shell运行,请使用-e参数(将SELECT 1替换为上述命令之一):

$ mysql -e "SELECT 1"

或从标准输入中打印语句:

$ echo "FOO STATEMENT" | mysql

如果您的上述访问被拒绝,请指定-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:

# 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'"
}

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

登录到MySQL:

mysql -u root

现在创建并授予

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

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

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

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
链接地址: http://www.djcxy.com/p/73395.html

上一篇: Create new user in MySQL and give it full access to one database

下一篇: Retrieving the last record in each group