我想在MySQL中创建一个新用户,并只赋予它对一个数据库的完全访问权,比如dbTest,我使用create database dbTest;这样的命令创建这个数据库。MySQL的命令是什么呢?
尝试这样创建用户:
CREATE USER 'user'@'hostname';
尝试让它访问数据库dbTest:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
如果你在同一台机器上运行代码/站点访问MySQL,主机名应该是localhost。
现在我们来分析一下。
GRANT -该命令用于创建用户并授予数据库、表等权限。
ALL PRIVILEGES——这告诉它用户将拥有所有标准权限。但是,这并不包括使用GRANT命令的特权。
印度生物技术部。* -指示MySQL在整个dbtest数据库中应用这些权限。如果愿意,可以用特定的表名或存储例程替换*。
TO 'user'@'hostname' - 'user'是您创建的用户帐户的用户名。注意:这里必须有单引号。“hostname”告诉MySQL用户可以从哪个主机连接。如果您只想从同一台机器上获取,请使用localhost
IDENTIFIED BY 'password' -正如你已经猜到的那样,这设置了该用户的密码。
创建一个用户并授予数据库上的所有权限。
登录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)的所有特权授予本地主机上的该用户。
通过运行下面的命令,检查上面的命令授予该用户的权限。
SHOW GRANTS FOR 'user'@'localhost'
以防万一,如果您希望将用户访问限制为仅一个表
GRANT ALL ON mydb.table_name TO 'someuser'@'host';
语法
在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命令并输入到prompt中,然后使用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历史记录中?
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
忽略-p选项,如果mysql用户没有密码或只是按“[Enter]”键旁路。需要用实际值替换花括号括起来的字符串。
对我来说,这很有效。
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
在哪里
Spowner:用户名 1234: spowner的密码 测试:数据库“spowner”具有访问权限
如果主机部分被省略,它默认为通配符%,允许所有主机。
创建用户service-api
授予数据库上的所有权限。*访问'service-api'
SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'
尝试使用运行在Windows机器上的MySQL Workbench在MySQL上创建数据库时遇到此问题。
下面的命令适用于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' ;
OR
CREATE SCHEMA `my-database` ;
USE `my-database` ;
GRANT ALL PRIVILEGES ON `my-database`.`*` TO `my_user`@`%` IDENTIFIED BY 'my-password' ;
推荐文章
- 在MySQL中检测值是否为number
- MySQL中两个日期之间的差异
- 为什么在MySQL中文本列不能有一个默认值?
- 使用SQL查询查找最近的纬度/经度
- 如何停止mysqld
- 检查MySQL表是否存在而不使用“select from”语法?
- 从NOW() -1天选择记录
- 从表中选择1是什么意思?
- 数据库性能调优有哪些资源?
- 如何更改表的默认排序规则?
- MySQL foreign_key_checks是否影响整个数据库?
- 设置NOW()为datetime数据类型的默认值?
- 在MySQL中Datetime等于或大于今天
- 删除MySQL中的主键
- 我如何在MySQL中添加更多的成员到我的enum类型列?