SQL Server账号public权限

在SQL Server中,public是一个预定义的数据库角色,它是一个特殊的角色,所有数据库用户都是自动成为public角色的成员。public角色具有一定的权限,这些权限将自动继承给数据库中的所有用户。本文将介绍SQL Server账号public权限的使用和示例。

什么是public角色

public是SQL Server中的一个预定义数据库角色,它是默认创建的角色之一。public角色是一个特殊的角色,所有数据库用户都是自动成为public角色的成员,无法从public角色中删除用户。

public角色的权限

public角色具有一定的权限,这些权限将自动继承给数据库中的所有用户。public角色的权限包括但不限于以下内容:

  1. 对所有用户可见的系统表和视图的SELECT权限。
  2. 对所有用户可见的内置函数和存储过程的EXECUTE权限。
  3. 对所有用户可见的系统函数的EXECUTE权限。
  4. 对数据库中的所有对象的EXECUTE权限(需要满足对象所在模式的访问控制规则)。

需要注意的是,public角色的权限是只读的,即无法对数据库中的任何对象进行修改、删除或添加操作。

示例

接下来我们通过一个示例来演示public角色的使用。

  1. 首先,我们创建一个数据库并在其中创建一个表:
CREATE DATABASE TestDB;
GO

USE TestDB;
GO

CREATE TABLE Customers (
    CustomerId int PRIMARY KEY,
    CustomerName varchar(50)
);
GO
  1. 接下来,我们创建两个数据库账号:
CREATE LOGIN User1 WITH PASSWORD = 'password1';
GO

CREATE LOGIN User2 WITH PASSWORD = 'password2';
GO
  1. 将这两个账号映射到数据库中的用户,并将它们添加到public角色:
USE TestDB;
GO

CREATE USER User1 FOR LOGIN User1;
GO

CREATE USER User2 FOR LOGIN User2;
GO

ALTER ROLE public ADD MEMBER User1;
GO

ALTER ROLE public ADD MEMBER User2;
GO
  1. 现在,我们可以使用这两个账号登录数据库,并尝试访问表的数据:
-- 使用User1账号登录
USE TestDB;
GO

EXECUTE AS LOGIN = 'User1';
GO

SELECT * FROM Customers;
GO

REVERT;
GO

-- 使用User2账号登录
USE TestDB;
GO

EXECUTE AS LOGIN = 'User2';
GO

SELECT * FROM Customers;
GO

REVERT;
GO

通过以上代码,我们可以看到无论使用哪个账号登录数据库,都可以访问到表Customers的数据。这是因为这两个账号都是public角色的成员,继承了public角色的权限。

总结

在SQL Server中,public角色是一个特殊的角色,所有数据库用户都是自动成为public角色的成员。public角色具有一定的权限,这些权限将自动继承给数据库中的所有用户。在实际应用中,我们需要注意public角色的权限是只读的,无法对数据库中的任何对象进行修改、删除或添加操作。

通过本文的介绍和示例,相信读者对SQL Server账号public权限有了更深入的了解和理解。希望本文能够对你在实际应用中的工作有所帮助。

journey
    title SQL Server账号public权限
    section 创建数据库
    创建数据库 -> 创建表: CREATE TABLE
    section 创建账号
    创建表 -> 创建账号: CREATE LOGIN
    创建账号 -> 映射用户: CREATE USER
    section 添加到public角色
    映射用户 -> 添加到public角色: ALTER ROLE public ADD MEMBER
    section 访问数据
    添加到public角色 -> 访问数据: SELECT * FROM Customers
sequenceDiagram
    participant User1
    participant User2
    participant SQL Server

    User1->>SQL Server: 使用User1账号登录
    SQL Server->>User1: 验证账号
    User1->>SQL Server: SELECT * FROM Customers
    SQL Server->>User1: 返回数据

    User2->>SQL Server: 使用User2账号登录
    SQL Server->>User2: 验证账号
    User2->>SQL