使用sql server express为c#.net winform应用程序创建多个用户

时间:2011-03-01 06:51:26

标签: c# sql sql-server sql-server-2005

我在sql server express中有一个sql数据库。

我有一个登录MAINLOGIN,用于此数据库。

我想通过多个用户U1,U2,U3在这个数据库中插入数据,每个用户都有不同的用户ID&密码。

这些用户将由MAINLOGIN手动或通过winform应用程序创建。

因此,在创建MAINLOGIN时,我会允许他进一步创建登录。

为此,我该怎么办?

我无法创建MULTIPLE用户,因为对于一个数据库,只能在一次登录时创建一个用户。

所以我应该创建多个登录,L1,L2,L3,然后映射,U1,U2,U3到它们。

或者,有更好的方法吗?像应用程序角色等。

我不想使用Windows身份验证。因为如果我知道系统密码,那么我只需通过应用程序连接sql并插入错误的数据。

2 个答案:

答案 0 :(得分:4)

在SQL Server中,您可以拥有基于Windows帐户的帐户,也可以使用单独的特定SQL帐户。对于这两种变体,您需要每个用户的一个帐户,需要使用您的数据库。

唯一的例外是能够为Windows安全性创建SQL Server登录,例如MyAppUsers,然后是数据库中用于该登录的用户。这样,作为该安全组成员的任何Windows帐户(在Windows / AD中)也将具有查看/使用您的数据库的权限。

使用这种方法,您还可以管理谁可以将您的数据库用于SQL Server,因为它实际上只取决于Windows安全组中的成员身份。

一个登录,一个用户 - 多个获得此权限的Windows帐户。对我来说似乎是一个胜利者!

更新:

为Windows AD组创建登录名:

CREATE LOGIN [DOMAIN\GroupName] FROM WINDOWS

根据该登录信息在数据库中创建用户:

USE (your database)

CREATE USER GroupNameUser 
FOR LOGIN [DOMAIN\GroupName]

SQL Server连接的连接字符串:

server=(your server);database=(your database);integrated security=SSPI;

我还能告诉你什么?

更新#2:使用Windows帐户的代码是:

为需要使用您的应用程序的每个用户创建一个登录信息

CREATE LOGIN (some login name) WITH PASSWORD = 'Top$ecret'

根据该登录信息在您的数据库中创建用户 - 再次为您的应用的每个用户创建一次:

USE (your database)

CREATE USER UserName
FOR LOGIN (some login name)

SQL Server连接的连接字符串:

server=(your server);database=(your database);
  user id=UserName;Password=Top$ecret

但同样:这需要一次登录,包括密码和每个数据库中的一个用户,您需要跟踪并可能从数据库应用程序执行“重置密码”操作等操作。在管理开销方面还有很多!

答案 1 :(得分:2)

维护每个用户与SQL的连接非常昂贵,并且可能导致应用程序性能不佳。更好的设计是维护应用程序角色并通过这些角色允许用户权限。对于连接SQL - 仅使用一个与任何用户无关的帐户。此帐户仅用于数据库访问,其中数据库中包含一些审计数据,以跟踪谁执行了哪些操作。