SQL权限添加数据以及如何validation?
我正在寻找一种很好的方法来维护谁可以将数据添加到C#app和SQL Server 2005中的数据库的权限。
我需要解释一下,但要明确这一点。 那么让我们举个例子:
我有两个用户Bob
和Jim
,两者都已添加到SQL权限中,因此他们具有对数据库的写入权限。 现在,所有访问都基于域用户帐户。 所有其他用户只有读取权限。
现在我有几个表,例如:
因此UserPermissions
包含Users和BookPublishers列表。 例如: Bob
有权为MS Press
添加书籍, Jim
有权为O'Reilly
添加书籍。
现在我需要validation这些信息并限制它们可以添加的内容。
所以说Jim
从命令行使用我的应用程序,他写了类似的东西:
Addbook.exe "C# 3.0 in a Nutshell" "O'Reilly"
该工具应该继续并将书籍添加到书籍表中。
现在说Bob
尝试相同的命令,该工具应该出错,因为他没有O'Reilly
添加书籍的权限。
现在我需要知道如何做几件事。
现在我并不是100%担心用户注入恶意数据,虽然停止它会很好,但它是一个内部工具,我想我可以信任用户……(可能)
无论哪种方式,我都不知道从哪里开始,我的SQL技能非常缺乏。
Akk,最后一件事,我不想使用存储过程添加数据。
好吧,让我们打破这个:
validation用户是否可以写入表(如果为true,则返回1,否则返回0):
SELECT isnull(has_perms_by_name('MyDb.dbo.MyTable', 'OBJECT', 'INSERT'), 0)
validation用户是否可以编写该发布者:
SELECT count(*) FROM UserPermissions WHERE UserName = 'username' AND Publisher = 'publisher'
现在,那是那些SQL,而不是实际的C#。 要获取C#中的值:
SqlConnection SqlConn = new SqlConnection("connection_string_goes_here"); SqlCommand SqlCmd = new SqlCommand(); SqlConn.Open(); SqlCmd.Connection = SqlConn; SqlCmd.CommandText = "SELECT isnull(has_perms_by_name('MyDb.dbo.MyTable', " + "'OBJECT', 'INSERT'), 0)" if (SqlCmd.ExecuteScalar()) { SqlCmd.CommandText = "SELECT count(*) FROM UserPermissions WHERE " + "Username = " + System.Environment.UserDomainName + "" + System.Environment.UserName + " " + AND Publisher = @Publisher"; SqlCmd.Parameters.Add("@Publisher", SqlDbType.NVarChar); SqlCmd.Parameters("@Publisher").Value = PublisherInput; if(SqlCmd.ExecuteScalar()) { SqlCmd.Parameters.Clear(); SqlCmd.CommandText = "INSERT INTO Books (Title, Publisher) VALUES " + "(@Title, @Publisher)"; SqlCmd.Parameters.Add("@Title", SqlDbType.NVarChar); SqlCmd.Parameters.Add("@Publisher", SqlDbType.NVarChar); SqlCmd.Parameters("@Title").Value = TitleInput; SqlCmd.Parameters("@Publisher").Value = PublisherInput; SqlCmd.ExecuteNonQuery(); } } SqlCmd.Dispose(); SqlConn.Close(); SqlConn.Dispose();
最后请注意, 清理您的输入 。 在应用程序中使用参数, 不要信任任何用户,甚至是内部用户 。 我不能强调这一点。
编辑:因为有一种方法可以给猫皮肤,我觉得不包括LINQ to SQL解决方案(至少对于计数问题)是愚蠢的:
int PermsAvailable = (from up in db.UserPermissions where up.Username == System.Environment.UserDomainName + "" + System.Environment.UserName && up.Publisher == PublisherInput select up).Count(); if(PermsAvailable) { var NewBook = New Book with {.Title = TitleInput, .Publisher = PublisherInput}; db.Books.Add(NewBook); }
本文解释了使用特定权限保护应用程序的各种方法。 值得一读的是本系列的其余部分以及之前的ASP.NET 2.0系列,以便了解所使用的体系结构。
从可用性的角度来看,我想知道在UI中管理可编辑性是否更友好。 作为一个用户,如果我输入数据并被一条我无权进入该条目的消息打耳光,我将不会被鼓励继续参与您的网站。
如果用户无法向数据库添加任何条目,则可以显示只读页面(或DIV)。 拥有保存新条目权限的用户将获得可编辑的页面/ DIV。
对于被允许保存某些类别信息但不保存其他信息的用户,是否可以使用下拉列表限制该类别中的条目? 例如,Bob的发布者下拉列表显示MSPress,Jim的列表包括O’Reilly。 这样,他们可以从这些列表中清楚地看到他们在尝试添加数据之前允许做什么。 权限不是秘密,对用户隐藏。
上述就是C#学习教程:SQL权限添加数据以及如何validation?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1034758.html