【问题标题】:creating multiple users for a c#.net winform application using sql server express使用 sql server express 为 c#.net winform 应用程序创建多个用户
【发布时间】:2011-03-01 06:51:26
【问题描述】:

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

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

我希望通过多个用户 U1、U2、U3 在此数据库中插入数据,每个用户都有不同的用户 ID 和密码。

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

所以在创建 MAINLOGIN 时,我会授予他进一步创建登录的权限。

为此我该怎么办?

我不能创建多个用户,因为对于一个数据库,一次登录只能创建一个用户。

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

或者,有没有更好的方法来做到这一点?比如应用角色等。

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

【问题讨论】:

  • 您可以为 Windows/AD 创建一个登录名,然后为该登录名创建一个用户;属于该的任何 Windows 用户现在都可以访问您的数据库表

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


【解决方案1】:

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

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

通过这种方法,您还可以将谁可以使用您的数据库的管理移出 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

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

【讨论】:

  • @marc_s,如果我使用 Windows 帐户,那么如果 U-1 离开他的系统,那么其他任何人都可以来开始使用他的系统,打开我的应用程序并连接到 sql 数据库。不知道的人连接sql server的时候有什么方法可以询问密码吗?
  • @sqlchild:当使用 Windows 帐户时,您不要要求输入密码;事实上,用户登录到 Windows 是 SQL Server 所需要的 - 没有提示,也无法打开。如果你想要,那么你需要使用 SQL Server 帐户(一个登录 + 一个用户为你的数据库的每个用户)
  • @sqlchild:更新了我的答案 - 不太确定你在寻找什么样的代码......
  • @marc_s : 所以你同意我应该避免在我的应用程序中使用 Windows 帐户吗?
  • @sqlchild:Windows 帐户易于使用,无需登录,您清楚地知道您在与谁打交道,您可以使用组来减少管理开销 - 不,实际上,我认为使用集成安全性(Windows 帐户)是一件好事,而且通常是有益的!
【解决方案2】:

维护每个用户与 SQL 的连接成本非常高,并且可能导致应用程序性能不佳。更好的设计是维护应用程序角色并通过这些角色允许用户权限。对于连接 SQL - 仅使用一个与任何用户无关的帐户。此帐户仅用于数据库访问,您的数据库中有一些审计数据以跟踪谁做了什么。

【讨论】:

  • 先生,您的意思是说,MAINLOGIN 将为 U-1,U-2,U-3 创建应用程序角色。对于 MAINLOGIN ,我将创建一个应用程序角色,然后将其提供给将使用 MAINLOGIN 的人。
  • 对于 MAINLOGIN 来创建用户 U1,U2,U3 ,他需要一个用户也映射到他,但你是说不要为连接到 SQL 的帐户创建任何用户
  • 先生,我如何授予用户添加应用程序角色的权限?
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2011-07-10
  • 2011-07-06
  • 1970-01-01
相关资源
最近更新 更多