获取mysql.user唯一ID?

问题描述:

为了记录数据库项目操作的作者凭据(如创建或更新操作),我使用了以下的架构:获取mysql.user唯一ID?

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更容易。用户标识参考?

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

我正确的做法吗?

号你的外键将不工作,你的思考方式有以下几个原因:

  • 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权限,或关机或一些人。 :-)


回复您的评论:

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

您可以使用列来存储看起来像用户&主机的数据值,但是如何确保您的团队无法将这些值设置为他们想要的值?你可以设计一个触发器来做到这一点,但团队可以修改触发器。

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

+0

好的权限,但没有办法获得作为录制字段的用户ID?例如,在数据库中保存谁是项目所有者的知识? – Erwan

+0

谢谢你的回答! – Erwan