获取mysql.user唯一id?

获取mysql.user唯一id?,mysql,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 , fore

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

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查询将从客户端完成。我不希望一个用户,一个团队的成员,能够更改另一个团队数据库中的任何内容


我这样做对吗?

不。外键无法按您的想法工作,原因有几个:

  • 在当前版本的mysql中,
    mysql.user
    表是MyISAM,而不是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'@'%';
等等

请注意,他们可能需要其他特权,但您不应授予他们超级特权、关机或其他特权。:-)


请回复您的评论:

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

您可以使用列来存储看起来像user&host的数据值,但如何确保您的团队不能将这些值设置为他们想要的任何值?您可以设计一个触发器来实现这一点,但是团队可以修改触发器


无论如何,既然您已经授予特权,只有适当的团队才有权访问各自的数据库,为什么要在表中记录用户和主机?

Ok for privileges,但无法将用户id作为记录字段获取?例如,在数据库中保存一项关于谁是物品所有者的知识?谢谢你的回答!