获取mysql.user唯一ID?

时间:2017-04-05 19:34:31

标签: mysql

为了记录数据库项操作的作者凭证(例如创建或更新操作),我使用以下架构:

CREATE TABLE Items
(id integer not null primary key auto_increment
, Item_data varchar(50) not null
, Item_lastmodified_author_name varchar(50) not null
, Item_lastmodified_author_host varchar(100) not null
, foreign key (Item_lastmodified_author_name) references mysql.user (User)
, foreign key (Item_lastmodified_author_host) references mysql.user (Host)
);

使用唯一的mysql.user id引用是不是可以使这更容易?

一个MySQL服务器用于3个团队。每个团队都有自己的数据库。因为MySQL查询将从客户端完成。我不希望一个团队的成员能够更改另一个团队数据库中的任何内容。

我是以正确的方式做到的吗?

1 个答案:

答案 0 :(得分:1)

没有。由于以下几个原因,您的外键不会以您的思维方式运作:

  • mysql.user表是MyISAM,而不是当前MySQL版本中的InnoDB表。 MyISAM不支持外键。
  • 您误解了多列外键的语法。你不会为每一列创建一个单独的外键,你可以创建一个由两列组成的外键,引用目标表的主键。
  • 即使您可以为mysql.user创建一个外键,也可以让任何团队在该表中引用任何用户,而不仅仅是他们自己的用户。

为什么不限制每个团队用户的权限?

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, 
  EXECUTE ON `team1`.* TO 'team1user'@'%';

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, 
  EXECUTE ON `team2`.* TO 'team2user'@'%';

请注意,他们可能需要其他权限,但您不应授予他们SUPER权限,SHUTDOWN或其他权限。 : - )

重新评论:

MySQL没有任何数据概念被拥有"由特定用户。用户有权读取或更改数据,但他们不拥有它。

您可以使用列来存储看起来像user&的数据值。主持人,但您如何确保您的团队无法将这些值设置为他们想要的任何值?您可以设计一个触发器来执行此操作,但团队可以修改触发器。

无论如何,为什么要录制用户&如果您已经授予权限以便只有适当的团队才能访问其各自的数据库,那么表中的主机是什么?