当前位置: 首页 > 面试题库 >

在具有特定前缀的多个表上授予特权

陈嘉荣
2023-03-14
问题内容

我正在使用表前缀方法,以使多个客户端使用同一数据库。每个客户端创建的表数约为55。除了可以通过手动列出表格来进行所有授予之外,我还可以执行以下操作吗?

GRANT SELECT,INSERT,UPDATE,DELETE ON database.prefix_* TO 'username'@'localhost' IDENTIFIED BY 'password';

问题答案:

预告:这不是我的答案。我在http://lists.mysql.com/mysql/202610上找到了它,并且为了简单起见将其复制并粘贴到了Stephen
Cook

您可以使用INFORMATION_SCHEMA.TABLES视图为您生成GRANT语句。按照以下方式编写查询:

SELECT   CONCAT('GRANT SELECT ON test.', TABLE_NAME, ' to ''foouser'';')
FROM     INFORMATION_SCHEMA.TABLES
WHERE    TABLE_SCHEMA = 'test'
      AND TABLE_NAME LIKE 'foo_%'

然后运行它,复制结果,然后将这些结果作为查询或脚本运行。您当然可以为此疯狂,例如,如果您对许多用户这样做,可能会编写一个存储过程,该过程使用用户名的参数,因此可以在需要时用作工具。

这不是您要求的语法,但这是一个不错的技巧。

-

将表模式“ test”替换为数据库名称。foo_%可以替换为适当的prefix_%

我自己尝试了一下,效果很好。



 类似资料:
  • 问题内容: 想象有一个学生表 student(id,name,city), 我想创建一个用户A,并且只授予更新id = 10的记录的权限。 我试过了,它不起作用。 问题答案: 不是只有一行, 而是包含 一行 的视图将依次更新实际的实际表。 这可以通过每个学生的特定表视图来完成(是的,这将是一个混乱的数据库结构)。仅在选择/更新之后才授予该用户对该视图的访问权限,并且主键将不可更新。当更新视图时,主

  • 如有任何帮助,我们将不胜感激。

  • 问题内容: 我已经创建了数据库,例如’mydb’。 现在,我可以从任何地方登录数据库,但是无法创建表。 如何授予该数据库和(将来)表的所有特权。我无法在“ mydb”数据库中创建表。我总是得到: 问题答案: 这就是我创建“超级用户”特权的方式(尽管我通常会指定一个主机)。 虽然此答案可以解决访问问题,但可以创建一个MySQL用户,该用户可以编辑其他用户的权限。 使用GRANT OPTION特权,您

  • 问题内容: 我看过许多类似的问题,因此表明我已经检查了基础知识。当然,这并不意味着我没有错过任何显而易见的东西。:-) 我的问题是:为什么我拒绝具有特权的用户访问权限,而我却已经在其中输入密码并被授予访问权限?(为了完整起见,我尝试输入错误的密码只是为了确保MySQL客户端在程序启动时拒绝我访问。) 背景: 通过ssh登录到运行MySQL服务器的计算机的外壳,我以root用户身份登录: 太棒了 我

  • 问题内容: 我有一个名为“ seeder”的软件包: 现在我想用MyFunc前缀调用所有函数 我想要这样的东西: 这个输出: EDIT1 :在此示例中,parentKey是在循环中更改的字符串变量 但是GC说: 使用没有选择器的包播种机 问题答案: 您无法通过函数名称获得函数,而这正是您想要做的。原因是,如果Go工具可以检测到未显式引用某个函数(因此无法访问该函数),则该函数甚至可能无法编译为可执

  • 我对XML文件进行数字签名,但需要签名标记包含名称空间前缀“ds”。我在谷歌上搜索了一下,发现了很多同样的问题,但没有令人满意的答案。 我尝试将“ds”手动放入文件中,但签名变得无效。标记“SignatureValue”对标记“SignedInfo”进行签名,因此签名无效。 谁能告诉我如何生成标记“signaturevalue”的值,以便在添加前缀“ds”后替换签名?