【问题标题】:Creating user for SQL Server database and accessing through C#.net application为 SQL Server 数据库创建用户并通过 C#.net 应用程序访问
【发布时间】:2012-11-28 13:51:46
【问题描述】:

我已经为 SQL Server 数据库创建了用户。它创建得很好。

我的问题是当我通过执行以下代码访问应用程序时,它不会切换到我指定为的用户

exec as user='myuser'
ALTER USER myuser WITH DEFAULT_SCHEMA=maindb
EXEC sp_addrolemember N'db_owner', N'myuser'

我已经将查询运行为

DbCommand command = ds.CreateCommand();
command.CommandText = "exec as user='myuser'";
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();

来自 C# 代码

等待您的宝贵回复和cmets

【问题讨论】:

  • 你的连接字符串在哪里?您也可以使用 SqlCommand 类而不是 DbCommand
  • 连接字符串是 DbConnection ds = "";从 web.config 文件中获取的值
  • 为什么不以 myuser 身份连接数据库?
  • 您要打开连接吗?它在 try-catch 块中吗?
  • @all 我只是将数据库切换到数据库中的不同用户

标签: c# .net sql-server sql-server-2008


【解决方案1】:

是的,这是意料之中的。连接字符串包含连接到服务器所需的凭据。并且通常在应用程序和数据库之间有一个连接字符串来优化资源并利用连接池等。

不同的用户在系统中可能有不同的权限,但这可以通过授权来处理,而不是连接字符串。

【讨论】:

  • 在创建用户时我应该给用户什么命令来授予所有访问权限
  • 你不会的。将有一个帐户用于在应用程序和数据库之间进行通信。 (最多 2 个,一个用于用户,另一个用于系统管理员)。用户及其凭据/访问/操作可以由另一个来源管理。无论是活动目录、RDBMS 中的一组表、硬编码配置设置、文档数据库等。其中一个例子是 web 应用程序的 asp.net 成员资格提供程序。
  • 我应该澄清管理用户独立于连接字符串和数据库操作。您可以管理用户有权执行的操作,但这不是在数据库级别完成的,而是在应用程序中完成的。
【解决方案2】:

EXECUTE AS Clause

在 EXECUTE AS 子句中指定的用户名或登录名必须作为 sys.database_principals 或 sys.server_principals 中的主体, 分别,否则创建或更改模块操作将失败。 此外,创建或更改模块的用户必须具有 对主体的 IMPERSONATE 权限。

你满足这些条件吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2011-12-25
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多