2

SQL Serverを使用してC#アプリケーションを開発していますが、ストアドプロシージャを呼び出して、ログインとユーザーを作成したいと考えています。

私はこれを行う最も簡単な方法を探しています。デフォルトのものだけですが、ユーザー名とパスワードがあります。

ログインの横にある作成は赤で下線が引かれていますか?

しかし、私のログインは大丈夫だと思いますか?何か足りないものがあれば教えてください。

そして、createユーザーの場合、それはそのような1つのライナーだけですか?

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 を使用できることを意味します。

| | (縦棒) = 大括弧または中括弧で囲まれた構文項目を区切ります。使用できるアイテムは 1 つだけです。

編集:

それらは同義語であることを追加する必要がありました。それらのいずれを使用しても、結果は同じです。

于 2012-06-07T11:55:22.707 に答える
0

ユーザーの権利を考慮する必要があります。SQL Server ログインとデータベース ユーザーを作成するには、SQL Server インスタンスに対する高い権限が必要です。そのため、アクションを実行するためのユーザー権限 (およびサーバー レベルとデータベース レベルのアクセス許可) を付与するか、サーバーを脆弱にしないように他のメカニズムを使用する必要があります。

オプションの 1 つは、証明書と署名ストアド プロシージャを使用して「適切に」処理し、ログイン/ユーザーを直接作成できないようにすることです。

また、トレースを使用できる人は、パスワードを見ることができます (手順でそれをラップしていない場合、パスワードはトレースに表示されません)。

于 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 に答える