如题,如何实现用TSQL删除某一数据中所有已经存在的用户.

解决方案 »

  1.   

    sp_dropuser只能删除知道名字的数据库用户吧,我想问的是如何删除某一数据库中的全部用户比如某一数据库中有用户
    user1,user2,tto,ttd
    如何用SQL删除全部这几个用户,而不用一个一个指定名字删除
      

  2.   

    Hi,
       Coming one
    USE AdventureWorks
    GO
    --创建个User
    CREATE LOGIN AbolrousHazem 
        WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
    USE AdventureWorks;
    CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
    GO --Drop User语句
    SELECT 'DROP USER ' + NAME 
    FROM dbo.sysusers 
      

  3.   

    DROP USER user_name
     参数
    user_name 
    指定在此数据库中用于识别该用户的名称。备注
    不能从数据库中删除拥有安全对象的用户。必须先删除或转移安全对象的所有权,才能删除拥有这些安全对象的数据库用户。不能删除 guest 用户,但可在除 master 
      

  4.   

    或者要用到游标吧,sysusers,要先知道怎么去判断哪些是系统自带的,还是用户创建的.
      

  5.   

    Hi,
      Coming one.
    0)QueryUSE MASTER
    GO
    BEGIN
    IF LEFT(CAST(Serverproperty('ProductVersion') AS VARCHAR(1)),1) = '9'
    BEGIN
    IF EXISTS(SELECT TOP 1  * FROM Tempdb.sys.objects(nolock) WHERE NAME LIKE '#tuser%')
    BEGIN
    DROP TABLE #tuser
    END
    END CREATE TABLE #tuser(
    ServerName varchar(256),
    DBName SYSNAME,
    [Name] SYSNAME,
    GroupName SYSNAME NULL,
    LoginName SYSNAME NULL,
    default_database_name SYSNAME NULL,
    default_schema_name VARCHAR(256) NULL,
    Principal_id INT,
    sid VARBINARY(85))
        
    --Version 2005 
        IF LEFT(CAST(SERVERPROPERTY('ProductVersion')AS varchar(1)),1)= '9'
    BEGIN 
    INSERT INTO #tuser
    EXEC sp_MSForEachdb
    'SELECT 
    @@SERVERNAME,
    ''?'',
    u.name,
    CASE 
    WHEN (r.principal_id IS NULL) THEN ''public''
    ELSE r.name
    END GroupName,
    l.name LoginName,
    l.default_database_name,
    u.default_schema_name,
    u.principal_id,
    u.sid
    FROM [?].sys.database_principals u
    LEFT JOIN ([?].sys.database_role_members m
    JOIN [?].sys.database_principals r 
    ON m.role_principal_id = r.principal_id)
    ON m.member_principal_id = u.principal_id
    LEFT JOIN [?].sys.server_principals l
    ON u.sid = l.sid
    WHERE u.TYPE <> ''R''
    order by u.name'
    END SELECT *
    FROM #tuser
    ORDER BY DBName,
    [name],
    GroupName
    END1)Result (Just list some,Sid ignore) ServerName DBName Name GroupName LoginName default_database_name default_schema_name Principal_id     
    CNSHDEV\SQLEXPRESS Testshen dbo db_owner NULL NULL dbo 1
    CNSHDEV\SQLEXPRESS Testshen guest public NULL NULL guest 2
    CNSHDEV\SQLEXPRESS Testshen INFORMATION_SCHEMA public NULL NULL NULL 3
    CNSHDEV\SQLEXPRESS Testshen liang public NULL NULL dbo 7
    CNSHDEV\SQLEXPRESS Testshen Shenl public Shenl master dbo 9
    CNSHDEV\SQLEXPRESS Testshen sys public NULL NULL NULL 4
    CNSHDEV\SQLEXPRESS Testshen test db_datareader NULL NULL db_datareader 5
    CNSHDEV\SQLEXPRESS Testshen test db_denydatawriter NULL NULL db_datareader 5
    CNSHDEV\SQLEXPRESS Testshen test_login public NULL NULL dbo 8
    CNSHDEV\SQLEXPRESS Testshen test12 public NULL NULL db_datareader 6
    ... ...