当前位置: 首页 > 编程语言 > C#

SQL添加数据权限及如何校验?分享

时间:2023-04-10 12:43:56 C#

SQL添加数据的权限以及如何验证?我正在寻找一种好方法来维护有关谁可以在C#应用程序和SQLServer2005中将数据添加到数据库的权限。我需要解释,但要说清楚。那么让我们举个例子:我有两个用户Bob和Jim,他们都被添加了SQL权限,所以他们对数据库有写入权限。所有访问现在都基于域用户帐户。所有其他用户只有读取权限。现在我有几个表,例如:所以UserPermissions包含一个Users和BookPublishers的列表。例如:Bob有权为MSPress添加书籍,而Jim有权为O'Reilly添加书籍。现在我需要验证此信息并限制他们可以添加的内容。假设Jim从命令行使用我的应用程序,他编写了如下内容:Addbook.exe"C#3.0inaNutshell""O'Reilly"该工具应该继续将书添加到books表中。现在假设Bob尝试相同的命令,该工具应该出错,因为他没有O'Reilly添加书籍的权限。现在我需要知道如何做一些事情。现在我不是100%担心用户注入恶意数据,虽然阻止它会很好,但它是一个内部工具,我想我可以信任用户......(可能)无论哪种方式,我不知道在哪里首先,我的SQL技能非常缺乏。Akk,最后一件事,我不想使用存储过程来添加数据。好的,让我们分解一下:验证用户是否可以写入表(如果为真则返回1,否则返回0):SELECTisnull(has_perms_by_name('MyDb.dbo.MyTable','OBJECT','INSERT'),0)验证用户是否可以编写该发布者:SELECTcount(*)FROMUserPermissionsWHEREUserName='username'ANDPublisher='publisher'现在,这就是SQL,而不是实际的C#。要获取C#中的值:SqlConnectionSqlConn=newSqlConnection("connection_string_goes_here");SqlCommandSqlCmd=newSqlCommand();SqlConn.Open();SqlCmd.Connection=SqlConn;SqlCmd.CommandText="SELECTisnull(has_perms_by_name('MyDb.dbo.MyTable',"+"'OBJECT','INSERT'),0)"if(SqlCmd.ExecuteScalar()){SqlCmd.CommandText="SELECTcount(*)FROMUserPermissionsWHERE"+"用户名="+System.Environment.UserDomainName+""+System.Environment.UserName+""+ANDPublisher=@Publisher";SqlCmd.Parameters.Add("@Publisher",SqlDbType.NVarChar);SqlCmd.Parameters("@Publisher").Value=PublisherInput;if(SqlCmd.ExecuteScalar()){SqlCmd.Parameters.Clear();SqlCmd.CommandText="INSERTINTOBooks(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=Publi她输入;SqlCmd.ExecuteNonQuery();}}SqlCmd.Dispose();SqlConn.Close();SqlConn.Dispose();最后,请注意,要在您的应用程序中使用参数来清理您的输入,请不要相信任何用户,即使是内部用户。我怎么强调都不过分。编辑:因为有一种给猫剥皮的方法,我觉得不包括LINQtoSQL解决方案是愚蠢的(至少对于计数问题):intPermsAvailable=(从db.UserPermissions中的up.Username==System.Environment.UserDomainName+""+System.Environment.UserName&&up.Publisher==PublisherInputselectup).Count();if(PermsAvailable){varNewBook=NewBookwith{.Title=TitleInput,.Publisher=PublisherInput};Db。Books.Add(新书);}本文解释了使用特定权限保护应用程序的各种方法。值得阅读本系列的其余部分以及之前的ASP.NET2.0系列,以了解所使用的体系结构。从可用性的角度来看,我想知道在UI中管理可编辑性是否更友好。作为用户,如果我输入数据并收到一条消息说我没有输入该条目的权限,我将不会被鼓励继续与您的网站互动。如果用户不能向数据库添加任何条目,您可以显示一个只读页面(或DIV)。有权保存新条目的用户将获得一个可编辑的页面/div。对于允许保存某些类别信息但不允许保存其他类别信息的用户,是否可以使用下拉列表来限制该类别中的条目?例如,Bob的Publishers下拉列表显示MSPress,而Jim的列表包括O'Reilly。这样他们就可以从这些列表中清楚地看到在尝试添加数据之前允许他们做什么。权限不是秘密的,对用户是隐藏的。以上就是C#学习教程:SQL添加数据的权限及如何验证?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: