从 C# 创建特定于数据库的登录名,该登录名无法编辑、更新或删除任何其他数据库,但映射到该数据库或设置为默认值的数据库除

本文关键字:数据库 登录 其他 任何 删除 映射 设置 默认值 创建 编辑 更新 | 更新日期: 2023-09-27 18:30:15

>我创建了一个名为"bilal"和"password"作为密码的登录名,并将其映射到数据库"MyDatabase"。但是当我尝试使用此登录名在另一个数据库中插入记录时,它不会拒绝插入。我希望此用户仅是数据库特定的用户,即"我的数据库"。以下是我声明的字符串。这是我的代码。

string loginName = "bilal";
 string password = "password";
 string serverName = "BILAL''BILAL";
 string databaseName = "MyDatabase";
protected void CreateUser()
        {
            Server svr = new Server(serverName);
            var db = svr.Databases[databaseName];
            var IsUser = svr.Logins[loginName];
            if (db != null && IsUser == null)
            {
                Microsoft.SqlServer.Management.Smo.Login login = new Microsoft.SqlServer.Management.Smo.Login(svr, loginName);
                login.DefaultDatabase = "master";
                login.GetDatabaseUser(databaseName);
                DatabaseMapping dbMapping = new DatabaseMapping(loginName,databaseName,loginName);
                login.DefaultDatabase = databaseName;
                login.LoginType = LoginType.SqlLogin;
                login.Create(password, LoginCreateOptions.None);
                login.Enable();
                User user = new User(db, loginName);
                user.UserType = UserType.SqlLogin;
                user.Login = loginName;
                user.Create();
                // add a role
                user.AddToRole("db_owner");
            }
            CrateAndFillTable();
        }

这是我的第二种方法,它尝试使用我在上述方法中创建的登录名创建一个表并将数据插入另一个数据库中。

  protected void CrateAndFillTable()
        {
            databaseName = "TestDB";
            if (conn.State == ConnectionState.Open)
                conn.Close();
            ConnectionString = "Integrated Security=true;" +
            "Initial Catalog=" + databaseName + ";" +
            "Data Source=" + serverName + ";" +
            "User Id=" + loginName + ";"+
            "Password=" + password + ";";
            conn.ConnectionString = ConnectionString;
            conn.Open();
            sql = "CREATE TABLE myTable" +
            "(myId INTEGER CONSTRAINT PKeyMyId PRIMARY KEY," +
            "myName CHAR(50), myAddress CHAR(255), myBalance FLOAT)";
            cmd = new SqlCommand(sql, conn);
            try
            {
                cmd.ExecuteNonQuery();
                // Adding records into the table
                sql = "INSERT INTO myTable(myId, myName, myAddress, myBalance) " +
                "VALUES (1001, 'M Bilal', 'Street1, Lahore', 23.98 ) ";
                cmd = new SqlCommand(sql, conn);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ae)
            {
            }
        }

从 C# 创建特定于数据库的登录名,该登录名无法编辑、更新或删除任何其他数据库,但映射到该数据库或设置为默认值的数据库除

从 CrateAndFillTable 中的 ConnectionString 中删除 "Integrated Security=true;",然后重试。集成安全性使用您的 Windows ID 而不是 Sqllogin 凭据。