我想在MySQL中创建一个新用户,并且只给予他对一个数据库的完全访问权限,比如我用类似于
create database dbTest;
的命令创建了一个名为dbTest
的数据库。那么应该使用什么MySQL命令来实现这个目标?create database dbTest;
的命令创建了一个名为dbTest
的数据库。那么应该使用什么MySQL命令来实现这个目标?尝试使用以下方法创建用户:
CREATE USER 'user'@'hostname';
尝试使用以下方法使其能够访问数据库 dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
如果您正在运行代码/网站并访问位于同一台机器上的MySQL,则主机名将是localhost。要在MySQL/MariaDB 5.7.6及更高版本中创建用户,请使用CREATE USER
语法:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
my_db
),请使用GRANT
语法,例如。GRANT ALL ON my_db.* TO 'new_user'@'localhost';
在这里,ALL
(priv_type) 可以替换为特定的权限,例如 SELECT
、INSERT
、UPDATE
、ALTER
等。
然后重新加载新分配的权限:
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
.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'"
}
~/.my.cnf
中,我将使用该密码进行工作。 - kenorbGRANT ALL ON *.* TO 'new_user'@'localhost';
不要忘记运行 FLUSH PRIVILEGES;
。 - Ravi Soni登录到MySQL:
mysql -u root
现在创建并授权
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
或者,如果您只想在数据库上授予完全不受限制的访问权限(例如,在本地计算机上进行测试),可以向匿名用户授予访问权限,方法如下:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
在开发中使用垃圾数据是可以的,但对于你关心的任何内容,请不要这样做。
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
对我而言,这起作用了。
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
哪里
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
这将授予该用户在本地数据库中一个名为test_database
(在您的情况下是dbTest
)的所有权限。
运行以下命令以检查上述命令对该用户发出的权限。
SHOW GRANTS FOR 'user'@'localhost'
如果您想限制用户仅访问一个单独的表格,请使用以下方法
GRANT ALL ON mydb.table_name TO 'someuser'@'host';
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'
apple
数据库中所有表的所有权限(apple.*
)授予用户john
,使用GRANT命令。*您可能需要使用用户root
登录:GRANT ALL ON apple.* TO 'john'@'localhost';
或者:
GRANT ALL PRIVILEGES ON apple.* TO 'john'@'localhost';
*.*
)授予用户john
,使用GRANT
命令。GRANT ALL ON *.* TO 'john'@'localhost';
或者:
GRANT ALL PRIVILEGES ON *.* TO 'john'@'localhost';
john
,该用户可以像默认用户root
一样拥有GRANT
权限,如下所示。*MySQL具有SUPER权限,但它不是用于创建超级用户的权限。GRANT ALL ON *.* TO 'john'@'localhost' WITH GRANT OPTION;
或者:
GRANT ALL PRIVILEGES ON *.* TO 'john'@'localhost' WITH GRANT OPTION;
CREATE USER 'my_user'@'%' IDENTIFIED BY 'fgj7dyfgteh';
CREATE DATABASE my-database ;
USE my-database ;
GRANT ALL PRIVILEGES ON 'my-database'.* TO 'my_user'@'%' IDENTIFIED BY 'my-password' ;
`
符号和
'
这些命令中使用了:
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' ;