نمایش نتایج 1 تا 7 از 7

نام تاپیک: users & permisions

  1. #1

    users & permisions

    با سلام
    application: vb2005
    database: sql server 2005
    connectin: ado.net
    اکثرا میان برای کاربران برنامه یک جدول درست میکنن و با استفاده از فیلدهای bit برای اونها در برنامشون حق دسترسی قائل میشن. و با استفاده از یک لاگین ثابت برنامه رو به دیتا بیس وصل میکنن. اما مسئله اینه که sql server هم یوزر داره و هم رولز. چطور میشه با استفاده از اپلیکیشن تو خود اسکیو‌ال یوزر جدید اضافه کنیم و براشون حق دسترسی قائل بشیم و هنگام وصل شدن هم از همان لاگین استفاده کنیم؟ یعنی برنامه ما با sa کانکت نشه و با لاگین همون یوزر کانکت بشه.

  2. #2
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: users & permisions

    هنگام وصل شدن هم از همان لاگین استفاده کنیم؟ یعنی برنامه ما با sa کانکت نشه و با لاگین همون یوزر کانکت بشه.
    مشكل شما اينه كه در connection string خود نام user و password را ثابت قرار داده ايد .(احتمالاً !!)

    شما مي توانيد در محيط برنامه نويسي connection string خود را طبق نيازتان تغيير دهيد.

    يه سر به اين پست بزن ، مشكلت حل ميشه انشا ا...

    https://barnamenevis.org/showthread.php?t=142114

    موفق باشيد.

  3. #3

    نقل قول: users & permisions

    درود
    نه دوست عزیز. گویا نتوانستم مشکلم را بیان کنم. قصد من این است که با اپلیکیشن در سرور لاگین بسازم

  4. #4
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: users & permisions

    شما يك script براي login بنويسيد و آن را از application خود اجرا نماييد. (البته اين در صورتي جواب مي دهد كه دسترسي جهت ساختن user را بر روي database داشته باشيد)

    اين هم يك مثال كامل از User login script :

    DECLARE @DatabaseUserName [sysname]
    SET @DatabaseUserName = 'user_name_goes_here'

    SET NOCOUNT ON
    DECLARE
    @errStatement [varchar](8000),
    @msgStatement [varchar](8000),
    @DatabaseUserID [smallint],
    @ServerUserName [sysname],
    @RoleName [varchar](8000),
    @ObjectID [int],
    @ObjectName [varchar](261)

    SELECT
    @DatabaseUserID = [sysusers].[uid],
    @ServerUserName = [master].[dbo].[syslogins].[loginname]
    FROM [dbo].[sysusers]
    INNER JOIN [master].[dbo].[syslogins]
    ON [sysusers].[sid] = [master].[dbo].[syslogins].[sid]
    WHERE [sysusers].[name] = @DatabaseUserName
    IF @DatabaseUserID IS NULL
    BEGIN
    SET @errStatement = 'User ' + @DatabaseUserName + ' does not exist in ' + DB_NAME() + CHAR(13) +
    'Please provide the name of a current user in ' + DB_NAME() + ' you wish to script.'
    RAISERROR(@errStatement, 16, 1)
    END
    ELSE
    BEGIN
    SET @msgStatement = '--Security creation script for user ' + @ServerUserName + CHAR(13) +
    '--Created At: ' + CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 108), ':', '') + CHAR(13) +
    '--Created By: ' + SUSER_NAME() + CHAR(13) +
    '--Add User To Database' + CHAR(13) +
    'USE [' + DB_NAME() + ']' + CHAR(13) +
    'EXEC [sp_grantdbaccess]' + CHAR(13) +
    CHAR(9) + '@loginame = ''' + @ServerUserName + ''',' + CHAR(13) +
    CHAR(9) + '@name_in_db = ''' + @DatabaseUserName + '''' + CHAR(13) +
    'GO' + CHAR(13) +
    '--Add User To Roles'
    PRINT @msgStatement
    DECLARE _sysusers
    CURSOR
    LOCAL
    FORWARD_ONLY
    READ_ONLY
    FOR
    SELECT
    [name]
    FROM [dbo].[sysusers]
    WHERE
    [uid] IN
    (
    SELECT
    [groupuid]
    FROM [dbo].[sysmembers]
    WHERE [memberuid] = @DatabaseUserID
    )
    OPEN _sysusers
    FETCH
    NEXT
    FROM _sysusers
    INTO @RoleName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @msgStatement = 'EXEC [sp_addrolemember]' + CHAR(13) +
    CHAR(9) + '@rolename = ''' + @RoleName + ''',' + CHAR(13) +
    CHAR(9) + '@membername = ''' + @DatabaseUserName + ''''
    PRINT @msgStatement
    FETCH
    NEXT
    FROM _sysusers
    INTO @RoleName
    END
    SET @msgStatement = 'GO' + CHAR(13) +
    '--Set Object Specific Permissions'
    PRINT @msgStatement
    DECLARE _sysobjects
    CURSOR
    LOCAL
    FORWARD_ONLY
    READ_ONLY
    FOR
    SELECT
    DISTINCT([sysobjects].[id]),
    '[' + USER_NAME([sysobjects].[uid]) + '].[' + [sysobjects].[name] + ']'
    FROM [dbo].[sysprotects]
    INNER JOIN [dbo].[sysobjects]
    ON [sysprotects].[id] = [sysobjects].[id]
    WHERE [sysprotects].[uid] = @DatabaseUserID
    OPEN _sysobjects
    FETCH
    NEXT
    FROM _sysobjects
    INTO
    @ObjectID,
    @ObjectName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @msgStatement = ''
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 193 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'SELECT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 195 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'INSERT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 197 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'UPDATE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 196 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'DELETE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 224 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'EXECUTE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 26 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'REFERENCES,'
    IF LEN(@msgStatement) > 0
    BEGIN
    IF RIGHT(@msgStatement, 1) = ','
    SET @msgStatement = LEFT(@msgStatement, LEN(@msgStatement) - 1)
    SET @msgStatement = 'GRANT' + CHAR(13) +
    CHAR(9) + @msgStatement + CHAR(13) +
    CHAR(9) + 'ON ' + @ObjectName + CHAR(13) +
    CHAR(9) + 'TO ' + @DatabaseUserName
    PRINT @msgStatement
    END
    SET @msgStatement = ''
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 193 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'SELECT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 195 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'INSERT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 197 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'UPDATE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 196 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'DELETE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 224 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'EXECUTE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseUserID AND [action] = 26 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'REFERENCES,'
    IF LEN(@msgStatement) > 0
    BEGIN
    IF RIGHT(@msgStatement, 1) = ','
    SET @msgStatement = LEFT(@msgStatement, LEN(@msgStatement) - 1)
    SET @msgStatement = 'DENY' + CHAR(13) +
    CHAR(9) + @msgStatement + CHAR(13) +
    CHAR(9) + 'ON ' + @ObjectName + CHAR(13) +
    CHAR(9) + 'TO ' + @DatabaseUserName
    PRINT @msgStatement
    END
    FETCH
    NEXT
    FROM _sysobjects
    INTO
    @ObjectID,
    @ObjectName
    END
    CLOSE _sysobjects
    DEALLOCATE _sysobjects
    PRINT 'GO'
    END



    اين هم يكي ديگه :

    DECLARE @DatabaseRoleName [sysname]
    --SET @DatabaseRoleName = '{Database Role Name}'
    SET @DatabaseRoleName = 'role_name_goes_here'

    SET NOCOUNT ON
    DECLARE
    @errStatement [varchar](8000),
    @msgStatement [varchar](8000),
    @DatabaseRoleID [smallint],
    @IsApplicationRole [bit],
    @ObjectID [int],
    @ObjectName [sysname]

    SELECT
    @DatabaseRoleID = [uid],
    @IsApplicationRole = CAST([isapprole] AS bit)
    FROM [dbo].[sysusers]
    WHERE
    [name] = @DatabaseRoleName
    AND
    (
    [issqlrole] = 1
    OR [isapprole] = 1
    )
    AND [name] NOT IN
    (
    'public',
    'INFORMATION_SCHEMA',
    'db_owner',
    'db_accessadmin',
    'db_securityadmin',
    'db_ddladmin',
    'db_backupoperator',
    'db_datareader',
    'db_datawriter',
    'db_denydatareader',
    'db_denydatawriter'
    )

    IF @DatabaseRoleID IS NULL
    BEGIN
    IF @DatabaseRoleName IN
    (
    'public',
    'INFORMATION_SCHEMA',
    'db_owner',
    'db_accessadmin',
    'db_securityadmin',
    'db_ddladmin',
    'db_backupoperator',
    'db_datareader',
    'db_datawriter',
    'db_denydatareader',
    'db_denydatawriter'
    )
    SET @errStatement = 'Role ' + @DatabaseRoleName + ' is a fixed database role and cannot be scripted.'
    ELSE
    SET @errStatement = 'Role ' + @DatabaseRoleName + ' does not exist in ' + DB_NAME() + '.' + CHAR(13) +
    'Please provide the name of a current role in ' + DB_NAME() + ' you wish to script.'

    RAISERROR(@errStatement, 16, 1)
    END
    ELSE
    BEGIN
    SET @msgStatement = '--Security creation script for role ' + @DatabaseRoleName + CHAR(13) +
    '--Created At: ' + CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 108), ':', '') + CHAR(13) +
    '--Created By: ' + SUSER_NAME() + CHAR(13) +
    '--Add Role To Database' + CHAR(13)
    IF @IsApplicationRole = 1
    SET @msgStatement = @msgStatement + 'EXEC sp_addapprole' + CHAR(13) +
    CHAR(9) + '@rolename = ''' + @DatabaseRoleName + '''' + CHAR(13) +
    CHAR(9) + '@password = ''{Please provide the password here}''' + CHAR(13)
    ELSE
    BEGIN
    SET @msgStatement = @msgStatement + 'EXEC sp_addrole' + CHAR(13) +
    CHAR(9) + '@rolename ''' + @DatabaseRoleName + '''' + CHAR(13)
    PRINT 'GO'
    END
    SET @msgStatement = @msgStatement + '--Set Object Specific Permissions For Role'
    PRINT @msgStatement
    DECLARE _sysobjects
    CURSOR
    LOCAL
    FORWARD_ONLY
    READ_ONLY
    FOR
    SELECT
    DISTINCT([sysobjects].[id]),
    '[' + USER_NAME([sysobjects].[uid]) + '].[' + [sysobjects].[name] + ']'
    FROM [dbo].[sysprotects]
    INNER JOIN [dbo].[sysobjects]
    ON [sysprotects].[id] = [sysobjects].[id]
    WHERE [sysprotects].[uid] = @DatabaseRoleID
    OPEN _sysobjects
    FETCH
    NEXT
    FROM _sysobjects
    INTO
    @ObjectID,
    @ObjectName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @msgStatement = ''
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 193 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'SELECT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 195 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'INSERT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 197 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'UPDATE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 196 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'DELETE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 224 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'EXECUTE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 26 AND [protecttype] = 205)
    SET @msgStatement = @msgStatement + 'REFERENCES,'
    IF LEN(@msgStatement) > 0
    BEGIN
    IF RIGHT(@msgStatement, 1) = ','
    SET @msgStatement = LEFT(@msgStatement, LEN(@msgStatement) - 1)
    SET @msgStatement = 'GRANT' + CHAR(13) +
    CHAR(9) + @msgStatement + CHAR(13) +
    CHAR(9) + 'ON ' + @ObjectName + CHAR(13) +
    CHAR(9) + 'TO ' + @DatabaseRoleName
    PRINT @msgStatement
    END
    SET @msgStatement = ''
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 193 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'SELECT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 195 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'INSERT,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 197 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'UPDATE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 196 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'DELETE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 224 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'EXECUTE,'
    IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 26 AND [protecttype] = 206)
    SET @msgStatement = @msgStatement + 'REFERENCES,'
    IF LEN(@msgStatement) > 0
    BEGIN
    IF RIGHT(@msgStatement, 1) = ','
    SET @msgStatement = LEFT(@msgStatement, LEN(@msgStatement) - 1)
    SET @msgStatement = 'DENY' + CHAR(13) +
    CHAR(9) + @msgStatement + CHAR(13) +
    CHAR(9) + 'ON ' + @ObjectName + CHAR(13) +
    CHAR(9) + 'TO ' + @DatabaseRoleName
    PRINT @msgStatement
    END
    FETCH
    NEXT
    FROM _sysobjects
    INTO
    @ObjectID,
    @ObjectName
    END
    CLOSE _sysobjects
    DEALLOCATE _sysobjects
    PRINT 'GO'
    END


    موفق باشيد.
    آخرین ویرایش به وسیله saied_genius : پنج شنبه 03 بهمن 1387 در 19:06 عصر

  5. #5

    نقل قول: users & permisions

    ممنون
    فقط 2 سوال
    1 آیا این اسکریپت ها رول ها را هم مشخص میکنند؟ و اگر بله در کدام قسمت؟
    2 نام دیتا بیس را با چی جایگزین کنم؟

  6. #6
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: users & permisions

    نقل قول نوشته شده توسط seeker مشاهده تاپیک
    1 آیا این اسکریپت ها رول ها را هم مشخص میکنند؟ و اگر بله در کدام قسمت؟
    2 نام دیتا بیس را با چی جایگزین کنم؟
    ببينيد من دو script براي شما قرار دادم اولي بدون role و دومي با role

    نقل قول نوشته شده توسط seeker مشاهده تاپیک
    2 نام دیتا بیس را با چی جایگزین کنم؟
    من قسمتي براي ورود نام ديتابيس نديدم. لطفاً بيشتر توضيح دهيد.

  7. #7

    Exclamation نقل قول: users & permisions

    سلام دوستان عزیز
    یه سایت میخوام که دیتابیسمو روش قرار بدم و با استفاده از یه برنامه تحت ویندوز که خودم نوشتم بهش وصل بشم
    کسی آدرس یه سایتو داره که بتونم یطور رایگان دیتابیسمو روش قرار بدم؟
    اگه کسی از دوستان داره آدرسشو ئاسم به ایمیلم بفرسته...
    Ehsannozari7@yahoo.com
    ممنونم از همتون. . .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •