过去,当我实现自己的身份验证机制时,我会在我的应用程序的 MySQL 数据库中拥有一个与其他表有关系的用户表。但是,现在我正在考虑使用 ActiveDirectoryMembershipProvider,我看不到在 AD 用户和这些表之间创建类似关系的方法。
解决此问题的正常方法是什么?我是否应该接受这样一个事实,即有人可能会插入带有与现有用户不对应的用户 ID 的记录?我实际上并不期望会发生这种情况,但我习惯于确保数据库级别的完整性。
过去,当我实现自己的身份验证机制时,我会在我的应用程序的 MySQL 数据库中拥有一个与其他表有关系的用户表。但是,现在我正在考虑使用 ActiveDirectoryMembershipProvider,我看不到在 AD 用户和这些表之间创建类似关系的方法。
解决此问题的正常方法是什么?我是否应该接受这样一个事实,即有人可能会插入带有与现有用户不对应的用户 ID 的记录?我实际上并不期望会发生这种情况,但我习惯于确保数据库级别的完整性。
我不知道无论如何你可以通过 MySQL 做到这一点。如果您使用的是 SQL Server,则可以编写一个触发器,该触发器将调用一个 C# dll,以验证它们是 AD 成员。然后,如果不是,您可以阻止插入数据库。你也许可以用 MySQL 做这样的事情,但我对 MySQL 的了解非常少。
我认为在这种情况下您将不得不放弃数据库引用完整性。在将记录添加到数据库之前,只需让您的应用程序代码检查 Active Directory 帐户是否存在。
理论上,某些用户可以手动进入并键入引用无效 AD 帐户的 SQL INSERT 语句。但在实践中,希望您不会让一群用户直接访问表。如果应用程序代码是唯一访问数据库的东西,应用程序代码在插入行之前验证帐户,并且验证代码已经过测试,那么你应该没问题。
为了安全起见,您可以有一个夜间批处理过程,根据 Active Directory 验证引用表中的所有行。如果发现任何不一致,它可以向您发送电子邮件。这不会阻止完整性违规,但至少它会让您知道它们。