当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在MySQL中创建新用户并授予其对一个数据库的完全访问权限》经验,为你挑选了6个好方法。

我想在MySQL中创建一个新用户,并且只对一个数据库提供完全访问权限,比如dbTest我用一个命令创建的数据库create database dbTest;.那些MySQL命令会做什么?



1> Dan McGrath..:

试试这个来创建用户:

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


如果您允许网络访问并希望从任何主机进行连接,则可以将"主机名"更改为"%".例如,... TO'dbuser'@'%'IDENTIFIED ...'%'是主机通配符.
这对我有用:创建用户'user1'@'localhost'IDENTIFIED BY'密码'; 在db_database1上授予所有特权.*到"user1"@"localhost"IDENTIFIED BY'password'; FLUSH特权;
在处理用户和表时,不要忘记刷新权限!:-)
在将来的MySQL版本中将删除使用GRANT创建新用户(在编写本文时不推荐使用它).在将来,必须完成两个调用,CREATE USER然后GRANT.
@DanMcGrath:如果用户已经存在并且有密码,那么IDENTIFIED BY'password'是强制性的吗?

2> kenorb..:

句法

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

要使用上述命令,您需要将以下函数复制并粘贴到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'"
}



3> superluminar..:

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

登录MySQL:

mysql -u root

现在创建并授予

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

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

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

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

意识到

这适用于开发中的垃圾数据.不要对你关心的任何事情这样做.


确切地说,在担心所有其他事情的同时,也不要担心dev数据库的内容.您的开发数据库可能(可能会)拥有实时数据库数据的片段(例如,用于复制错误),应尽一切努力保持安全.没有密码就没有必要进行数据库访问.它甚至没有节省时间.不值得潜在的麻烦.
您可以创建这样的匿名用户,但不要!没有充分的理由让用户拥有完全权限和密码,但如果有人访问了不应该拥有的服务器,那么有一天它可能会毁掉你/ day/business/job.为什么要让他们更容易?
如果有人获得了对我的macbook的远程访问权限,那么我需要担心的事情比开发数据库的内容要多.我应该重新迭代,这仅用于本地测试,不要用真实数据执行此操作.

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

忽略-p选项,如果mysql用户没有密码只需按"[Enter]"按钮旁路.用大括号括起来的字符串需要替换为实际值.



5> candiru..:

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



6> Park JongBum..:

对我来说这很有效.

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

哪里

spowner:用户名

1234:spowner的密码

测试:数据库'spowner'具有访问权限

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有