Answers:
尝试创建用户:
CREATE USER 'user'@'hostname';
尝试执行以下操作以使其可以访问数据库dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
如果在同一台计算机上运行访问MySQL的代码/站点,则主机名将为localhost。
现在,分解。
GRANT
-这是用于创建用户并授予数据库,表等权限的命令。
ALL PRIVILEGES
-这告诉用户将拥有所有标准特权。但是,这不包括使用GRANT命令的特权。
dbtest.*
-这指示MySQL将这些权利应用于整个dbtest数据库。您可以根据需要将*替换为特定的表名或存储例程。
TO 'user'@'hostname'
-“用户”是您要创建的用户帐户的用户名。注意:您必须在其中使用单引号。“主机名”告诉MySQL用户可以连接的主机。如果只想从同一台计算机上使用,请使用localhost
IDENTIFIED BY 'password'
-如您所料,这将为该用户设置密码。
要在MySQL / MariaDB 5.7.6及更高版本中创建用户,请使用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)可与特定的权限,如替换SELECT
,INSERT
,UPDATE
,ALTER
,等。
然后要重新加载新分配的权限,请运行:
FLUSH PRIVILEGES;
要运行以上命令,您需要运行mysql
命令并将其键入提示符,然后通过quit
命令或Ctrl- 登出D。
要从shell运行,请使用-e
parameter(用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或为该文件提供源代码。在这种情况下,只需键入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历史记录中保留痕迹(例如密码),请检查:如何防止命令显示在Bash历史记录中?
~/.my.cnf
按照上述建议将密码添加到自己的密码中,则@CreativityKills将使用该密码。
登录到MySQL:
mysql -u root
现在创建并授予
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
或者,如果您只想授予对数据库的完全不受限制的访问权限(例如,在本地计算机上用于测试实例),则可以向匿名用户授予访问权限,如下所示:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
这对于开发中的垃圾数据很好。不要使用您关心的任何内容。
如果您要创建一个新用户,则下面的命令将起作用:授予该用户对本地主机上特定数据库(不是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';