我创建了数据库,例如'mydb'。
CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;
现在我可以从任何地方登录数据库,但无法创建表格。
如何授予该数据库和(将来)表的所有权限。我无法在'mydb'数据库中创建表。我总是得到:
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'
答案 0 :(得分:858)
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;
这就是我创建“超级用户”权限的方式(虽然我通常会指定一个主机)。
虽然这个答案可以解决访问问题,但WITH GRANT OPTION
创建了一个可以edit the permissions of other users的MySQL用户。
GRANT OPTION权限使您可以向其他用户提供或从其他用户中删除您自己拥有的权限。
出于安全原因,您不应将此类型的用户帐户用于公众可以访问的任何进程(即网站)。建议您create a user with only database privileges进行此类使用。
答案 1 :(得分:497)
这是一个老问题,但我不认为接受的答案是安全的。这对于创建超级用户很有好处,但如果你想在单个数据库上授予权限则不行。
grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';
%
似乎不包括localhost
适用的套接字通信。 WITH GRANT OPTION
仅对超级用户有利,否则通常会带来安全风险。
希望这有帮助。
答案 2 :(得分:109)
这对某些人有用:
从MySQL命令行:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
可悲的是,此时newuser无权对数据库执行任何操作。事实上,如果newuser甚至尝试登录(使用密码,密码),他们将无法访问MySQL shell。
因此,首先要做的是让用户能够访问他们需要的信息。
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
此命令中的星号指的是它们可以访问的数据库和表(分别) - 此特定命令允许用户读取,编辑,执行和执行所有数据库和表中的所有任务。
完成为新用户设置的权限后,请务必重新加载所有权限。
FLUSH PRIVILEGES;
您的更改现在将生效。
有关详细信息:http://dev.mysql.com/doc/refman/5.6/en/grant.html
如果您对命令行不满意,可以使用MySQL workbench,Navicat或SQLyog等客户端
答案 3 :(得分:28)
1.创建数据库
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
2.为数据库db_name
创建用户名CREATE DATABASE db_name;
3.使用数据库
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';
4.最后,您在数据库db_name中,然后执行create,select和insert operations等命令。
答案 4 :(得分:20)
此SQL授予所有数据库但仅授予基本权限。它们足以用于Drupal或Wordpress,并且作为一个精确的,允许一个开发者帐户用于本地项目。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
INDEX, ALTER, CREATE TEMPORARY TABLES
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
答案 5 :(得分:14)
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';
适用于架构的权限:)
可选:在mypasswd
之后,您可以添加WITH GRANT OPTION
答案 6 :(得分:12)
您好我使用此代码在mysql中拥有超级用户
GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
SUPER
ON *.* TO mysql@'%'
WITH GRANT OPTION;
然后
FLUSH PRIVILEGES;
答案 7 :(得分:12)
我只能通过添加GRANT OPTION
来使其工作,而不会始终接收权限被拒绝错误
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
答案 8 :(得分:5)
仅从远程服务器访问mydb数据库
GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';
从远程服务器访问所有数据库。
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
答案 9 :(得分:3)
在 MySQL Ver 8.0.21
上工作时,我遇到了这个挑战我想向my_app_db
主机上运行的root
用户授予名为localhost
的数据库的权限。
但是当我运行命令时:
use my_app_db;
GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';
我得到了错误:
错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获取在'my_app_db。* TO'root'@'localhost'在第1>
行附近使用的正确语法
这是我的固定方式:
登录到您的MySQL控制台。您可以将root
更改为您要登录的用户:
mysql -u root -p
输入您的 mysql root密码
接下来,列出MySQL服务器上的所有用户及其主机。与PostgreSQL不同,它通常存储在mysql
数据库中。因此,我们需要首先选择mysql
数据库:
use mysql;
SELECT user, host FROM user;
注意:如果不运行use mysql
,则会出现no database selected
错误。
这应该给您这样的输出:
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
接下来,根据从列表中获得的信息,向所需的用户授予特权。在授予数据库权限之前,我们需要先选择数据库。对我来说,我正在使用root
主机上运行的localhost
用户:
use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
注意:GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost';
命令可能不适用于现代版本的MySQL。选择要使用的数据库后,大多数现代版本的MyQL在授予特权命令中将database_name
替换为*
。
然后您可以退出MySQL控制台:
exit
就是这样。
我希望这会有所帮助
答案 10 :(得分:1)
要向数据库mydb
授予数据库的所有权益:myuser
,只需执行:
GRANT ALL ON mydb.* TO 'myuser'@'localhost';
或:
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
不需要PRIVILEGES
关键字。
此外,我不知道为什么其他答案表明IDENTIFIED BY 'password'
被置于命令的末尾。我认为这不是必需的。