PDA

View Full Version : حذف تمام Login ها بجز Sa



hamidprogramer
پنج شنبه 23 آبان 1387, 17:50 عصر
سلام من مي خوام تمام login هايي كه به غير از Sa هستند رو با يك كوئري حذف كنم كه كاربرهاي برنامم نتونن با لاگين هاي ويندوزي وارد بانك بشن.
البته خودم يه sp نوشتم كه اين كار رو براي يه سري لوگين ثابت انجام مي ده! ولي خوب نميشه براي لاگين هاي ويندوزي روي دستگاههاي ديگر استفادهاش كرد .
من اين راه حل رو پيدا كردم ولي دسترسي براي نجام اين كار براي Sa وجود نداره مي خوام بدونم راهي داره يا نه . ممنون
كد:

Delete FROM sys.server_principals WHERE name != N'sa' And (type In ('S','U'))
خطا :

Ad hoc updates to system catalogs are not allowed.

linux
جمعه 24 آبان 1387, 00:51 صبح
با دستور drop user (http://msdn.microsoft.com/en-us/library/ms189438.aspx) می توانید ، در یک حلقه این ها را انجام بدهید می توانید با sp_helpuser هم لیست تمام کاربرها را بگیرید.

hamidprogramer
شنبه 25 آبان 1387, 22:08 عصر
آيا اين روشي كه من انتخاب كردم خوب است يا نه؟
راه بهتري اگر وجود دارد خوشحال مي شوم اگر بفرماييد.


USE [MYDB]
GO
/****** Object: StoredProcedure [dbo].[Opr_DropLogins] Script Date: 11/15/2008 22:37:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[Opr_DropLogins]
As
Begin
Declare @MyTable Table ([Name] nvarchar(100))
Declare @Counter int
Declare @UserName nvarchar(100)
Set @Counter =
(Select Count(*) FROM sys.server_principals WHERE name != N'sa' And (type In ('S','U')))
Insert Into @MyTable
Select [name] FROM sys.server_principals WHERE name != N'sa' And (type In ('S','U'))

WHILE @Counter > 0
Begin
Set @UserName = (Select Top(1) name FROM @MyTable)
Execute('Drop Login ['+ @UserName + ']')
Delete from @MyTable Where name = @Username
Set @Counter = @Counter -1
End
End