我在sql server express中有一个sql数据库。
我有一个登录MAINLOGIN,用于此数据库。
我想通过多个用户U1,U2,U3在这个数据库中插入数据,每个用户都有不同的用户ID&密码。
这些用户将由MAINLOGIN手动或通过winform应用程序创建。
因此,在创建MAINLOGIN时,我会允许他进一步创建登录。
为此,我该怎么办?
我无法创建MULTIPLE用户,因为对于一个数据库,只能在一次登录时创建一个用户。
所以我应该创建多个登录,L1,L2,L3,然后映射,U1,U2,U3到它们。
或者,有更好的方法吗?像应用程序角色等。
我不想使用Windows身份验证。因为如果我知道系统密码,那么我只需通过应用程序连接sql并插入错误的数据。
答案 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 - 仅使用一个与任何用户无关的帐户。此帐户仅用于数据库访问,其中数据库中包含一些审计数据,以跟踪谁执行了哪些操作。