2

我正在使用 SQL Server 开发 C# 应用程序,并且想调用存储过程来创建登录名和用户。

我正在寻找最简单的方法来做到这一点,只是默认的东西,但有用户名和密码。

登录旁边的创建用红色下划线?

但我认为我的登录没问题?如果我遗漏了什么,请告诉我。

并且对于创建用户,它只是一个这样的衬线吗?

CREATE PROCEDURE CreateLoginAndUser 
       @UserName

   CREATE LOGIN @UserName 
   WITH PASSWORD = 'password', 
        DEFAULT_DATABASE = [TestAudit],
        DEFAULT_LANGUAGE = [British],
        CHECK_EXPIRATION=OFF,
        CHECK_POLICY=ON;

   CREATE USER 'DEV' + @UserName 
       [{ FOR | FROM } LOGIN @UserName] [WITH DEFAULT_SCHEMA = schema]

我不明白FOR而且FROM...

我可以做这样的事情:

CREATE PROCEDURE CreateLoginAndUser
     @UserName

    CREATE LOGIN @UserName  
    WITH PASSWORD = 'password', 
         DEFAULT_SCHEMA = schema    

    CREATE USER 'DEV'+@UserName 
       [{ FOR | FROM } LOGIN @UserName] [WITH DEFAULT_SCHEMA = schema]

谷歌如何搜索以下来源:

http://ss64.com/sql/login_c.html

http://ss64.com/sql/user_c.html

4

4 回答 4

4

考虑使用动态 SQL 创建用户。例如,要使用名为@login的数据库用户创建名为的服务器登录名'DEV' + @login

create procedure dbo.CreateLoginAndUser(
        @login varchar(100),
        @password varchar(100),
        @db varchar(100))
as
declare @safe_login varchar(200)
declare @safe_password varchar(200)
declare @safe_db varchar(200)
set @safe_login = replace(@login,'''', '''''')
set @safe_password = replace(@password,'''', '''''')
set @safe_db = replace(@db,'''', '''''')

declare @sql nvarchar(max)
set @sql = 'use ' + @safe_db + ';' +
           'create login ' + @safe_login + 
               ' with password = ''' + @safe_password + '''; ' +
           'create user DEV' + @safe_login + ' from login ' + @safe_login + ';'
exec (@sql)
go

在客户端构建 SQL 语句可能更容易。create login但即便如此,您也不能在语句中使用参数。所以要警惕 SQL 注入。

于 2012-06-07T11:50:00.633 回答
1

{ 为 | FROM } 表示您可以使用 for 或 from。

| (竖线)= 分隔括号或大括号中的语法项。您只能使用其中一项。

编辑:

我应该补充说它们是同义词,你可以使用它们中的任何一个,结果是一样的

于 2012-06-07T11:55:22.707 回答
0

您应该考虑用户权限。要创建 sql server 登录名和数据库用户,您必须对 SQL Server 实例具有高权限。因此,要么您必须授予用户执行该操作的权限(以及这意味着服务器级别和数据库杠杆权限),要么您必须使用其他机制来防止您的服务器易受攻击。

一种选择是使用证书和签名存储过程来“很好地”做事,并且不允许直接创建登录名/用户。

此外,能够使用跟踪的人将能够看到密码(如果您没有将其包装在程序中,则密码不会显示在跟踪中)。

于 2012-06-07T11:46:24.297 回答
0

这是一个关于如何为服务器范围创建登录名的示例,以及如何为您的数据库创建一个用户使其适应一个过程

USE [master]
GO
CREATE LOGIN [usr] WITH PASSWORD=N'pass', DEFAULT_DATABASE=[yourDb], DEFAULT_LANGUAGE=[English], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

USE [yourDb]
GO
CREATE USER [usr] FOR LOGIN ['usr]
GO

您只需要接收 usr 和 password 作为参数并使用它

于 2012-06-07T11:47:36.517 回答