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

如何仅向特定行授予MySQL特权

郜德容
2023-03-14
问题内容

想象有一个学生表
student(id,name,city),
我想创建一个用户A,并且只授予更新id = 10的记录的权限。

CREATE USER A ;
GRANT UPDATE ON student TO A WHERE student.id=10;

我试过了,它不起作用。


问题答案:

不是只有一行, 而是包含 一行 的视图将依次更新实际的实际表。

这可以通过每个学生的特定表视图来完成(是的,这将是一个混乱的数据库结构)。仅在选择/更新之后才授予该用户对该视图的访问权限,并且主键将不可更新。当更新视图时,主表将自动更新。

CREATE SCHEMA `example` ;

CREATE TABLE `example`.`student` (
      `id` INT NOT NULL,
      `name` VARCHAR(45) NULL,
      `email` VARCHAR(45) NULL,
      PRIMARY KEY (`id`));

INSERT INTO `example`.`student` (`id`, `name`, `email`) VALUES ('1', 'bob', 'bob@bob.com');


USE `example`;
CREATE 
     OR REPLACE SQL SECURITY DEFINER
VIEW `student_1` AS
    SELECT 
        `student`.`id` AS `id`,
        `student`.`name` AS `name`,
        `student`.`email` AS `email`
    FROM
        `student`
    WHERE
        (`student`.`id` = '1');

CREATE USER 'student_1_user'@'localhost' IDENTIFIED BY 'user_password';

    GRANT SELECT,UPDATE ON example.student_1 TO student_1_user@localhost IDENTIFIED BY 'user_password';

UPDATE example.student_1 SET email='newemail@bob.com'; // note no primary key needed or allowed


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

  • 我的Azure Functions应用程序应使用Excel输入/输出绑定。这些文件存储在特定的sharepoint文档库中。我希望使用应用程序权限,而不是用户委托的权限。 图表留档里有这个 文件夹。读写。全部的 这对我来说太宽了。是否可以将范围缩小到特定sharepoint中的特定文件夹? 干杯干杯

  • 问题内容: 我正在使用表前缀方法,以使多个客户端使用同一数据库。每个客户端创建的表数约为55。除了可以通过手动列出表格来进行所有授予之外,我还可以执行以下操作吗? 问题答案: 预告:这不是我的答案。我在http://lists.mysql.com/mysql/202610上找到了它,并且为了简单起见将其复制并粘贴到了Stephen Cook 您可以使用INFORMATION_SCHEMA.TABL

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

  • 或https://graph.microsoft.com/v1.0/me....... 谢谢你的帮助

  • 问题内容: 我正在使用for循环读取文件,但是我只想读取特定的行,例如26号和30号行。是否有任何内置功能可实现此目的? 问题答案: 如果要读取的文件很大,并且你不想一次读取内存中的整个文件: 注意,对于nth行。 在Python 2.6或更高版本中: