我是编码C#的新手。我有一个Dynamodb表,我想允许使用相同的用户名但不同的密码。这可能吗?当我尝试创建一个新条目时,它只是用新密码替换用户名,但我想保留两个用户名不同的密码!!
这是我正在使用的代码 感谢
{
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
string tableName = "idcheck";
var request = new PutItemRequest
{
TableName = tableName,
Item = new Dictionary<string, AttributeValue>()
{
{ "username", new AttributeValue { S = textBox1.Text }},
{ "password", new AttributeValue { S = textBox2.Text }},
}
答案 0 :(得分:2)
DynamoDB表的表键必须是唯一的。要完成您想要执行的操作,您可以使用组合键,用户email
作为哈希键,password
作为范围键。听起来username
是您表格的哈希键,而您没有范围键,这就是当前条目被覆盖的原因。您需要创建一个具有范围键的新表,并为每个用户名设置一个唯一的范围键,以便为用户名设置多个值。
话虽如此,你永远不应该永远以纯文本存储密码。密码应在存储中进行散列和盐渍。您可能要做的一件事是使用UUID或时间戳作为范围键和密码的盐,并将散列和盐渍密码存储为表的常规元素。
无论您做什么,都要查找密码存储最佳做法,并且不要以明文形式存储密码。
答案 1 :(得分:2)
首先,您似乎应该使用email
作为哈希键,并使用password
作为范围键。这样在DynamoDB中,您将能够获得以下数据:
email (Hash Key) | password (Range Key)
------------------------|-------------------------------------
user1@gmail.com | be655ea0-8332-44db-9319-1e22da74b2b3
user1@gmail.com | aa5bf017-57e3-419c-acd2-d2f68a73d913
user2@gmail.com | 48bee58a-07a4-4154-aea4-10a531909184
但这是关系数据库设计,它只在关系数据库中蓬勃发展。在DynamoDB中,您通常具有有限的查询功能,您可能希望从此用例中释放Range Key以获得更有目的性。
相反,在像DynamoDB这样的平面NoSQL数据库中,您可以执行以下操作,将email
作为您的哈希密钥,并使用String Set
来存储所有密码:
email (Hash Key) | password (String Set)
------------------------|---------------------------------------------------------------------------------
user1@gmail.com | ['be655ea0-8332-44db-9319-1e22da74b2b3', 'aa5bf017-57e3-419c-acd2-d2f68a73d913']
user2@gmail.com | ['48bee58a-07a4-4154-aea4-10a531909184']
请注意以下解决方案:
64KB
,但您可以随时存储大约1.7k个密码。我认为这应该足够了。