sql server将某张表的所有权限给全部用户
时间: 2024-11-03 12:15:30 浏览: 52
在SQL Server中,如果你想将一张表的所有权限授予所有用户,可以采取以下步骤:
1. **拥有者权限**:首先,你需要确定这张表的当前所有者是谁。如果你是数据库的所有者或者有足够的权限,你可以直接操作。
2. **GRANT ALL TO...**:使用`GRANT`语句,可以向特定的用户、角色或公共角色(如dbo、public等)授予权限。对于所有的用户,通常会提到"dbo"角色,因为默认情况下,新的登录账户会被添加到这个角色中。语法如下:
```sql
GRANT SELECT, INSERT, UPDATE, DELETE ON [schema.]table_name TO [public] OR [role_name];
```
这里`SELECT`, `INSERT`, `UPDATE`, `DELETE`代表常见的数据操作权限,你可以根据需要选择授予哪些权限。
3. **避免无意间的全局授权**:这种做法可能会让所有新创建的用户都有对表的完全控制权,所以在实际生产环境中,通常只会在测试阶段或者明确知晓后果的情况下这么做。
4. **注意安全性**:授予所有用户全表访问权限可能存在安全风险,特别是对于敏感数据。建议根据业务需求和权限管理策略谨慎操作。
相关问题
(1)在SQL Server中建立一个名为“李勇”的登录用户。 方法: ① 在SQL Server 2012对象资源管理器中展开服务器组,在“安全性”文件夹上单击右键,在弹出的“新建”菜单中选择“登录”项,则出现新建登录对话框。在此对话框中可通过“常规”、“服务器角色”、“用户映射”、“安全对象”、“状态”5个选择页进行设置。 ★ 在“常规”选择页中,输入用户名,选择SQL Server身份验证,输入用户口令; ★ 在“服务器角色”选择页中,需要确定用户所属的服务器角色,这里采用默认值; ★ 在“用户映射”选择页中,可设置该登录账号可以访问的数据库,可选择school数据库。 ★ 在“安全对象”选择页中,可对不同类型的安全对象进行安全授予或拒绝(这里采用默认值); ★ 在“状态”选择页中显示了用户登录的状态信息等。 最后单击确定按钮,即完成了创建登录用户的工作。 ② 以系统管理员身份登录SQL Server 2012,单击“新建查询”,输入如下代码执行即可。 exec sp_addlogin ‘李勇’, ‘123456’,‘school’, ‘English’ go use school go exec sp_grantdbaccess ‘李勇’ (2)对新建用户李勇授予school数据库中students表的select权限。 (3)将赋予用户李勇的对students表的select权限收回。 (4)创建一个数据库角色,该角色拥有对上述school数据库中四张表的select和insert权限,然后使用该角色给所有用户赋予这些权限。
收到了你的请求,我可以回答你的问题。针对第一个问题,我了解如何在 SQL Server 中建立名为“李勇”的登录用户,具体做法是:使用 SQL Server 2012对象资源管理器展开服务器组,并在“安全性”文件夹上单击右键,在弹出的“新建”菜单中选择“登录”项,进入新建登录对话框,在对话框的不同选择页中设置相关参数,最后单击确定按钮即可完成操作。
对于第二个问题,我知道如何授予新建用户李勇对 school 数据库中的 students 表的 select 权限,方法是在 SQL Server 中使用 sp_grantdbaccess 存储过程进行操作。
第三个问题,如果需要收回赋予用户李勇的对 students 表的 select 权限,可以使用 SQL Server 中的 sp_revokedbaccess 存储过程进行操作。
针对第四个问题,我了解如何创建一个数据库角色,并给该角色赋予对 school 数据库中的四张表的 select 和 insert 权限,然后使用该角色给所有用户赋予这些权限。具体做法是,在 SQL Server 中使用 CREATE ROLE 语句创建一个数据库角色,并使用 GRANT 语句给该角色赋予相关权限,然后使用 sp_addrolemember 存储过程将所有需要拥有这些权限的用户添加到该角色中即可。
希望我的回答能对你有所帮助。
使用sql server语言写出一个宿舍信息管理数据库,要求有5张表和至少两个视图,给出相关类型,有主、外键,有触发器,有权限分配,和针对某功能模块的复杂查询设计,写出相关代码
好的,以下是一个简单的宿舍信息管理数据库的设计,包括5张表和2个视图:
1. 学生信息表(Student)
| 列名 | 类型 | 主键 | 外键 |
| :----: | :----: | :---: | :----: |
| stu_id | int | √ | |
| name | char | | |
| gender | char | | |
| age | int | | |
| room | int | | Room.r_id |
2. 宿舍楼信息表(Building)
| 列名 | 类型 | 主键 | 外键 |
| :-----: | :----: | :---: | :----: |
| bldg_id | int | √ | |
| name | char | | |
| floors | int | | |
3. 宿舍房间信息表(Room)
| 列名 | 类型 | 主键 | 外键 |
| :----: | :-----: | :---: | :----: |
| r_id | int | √ | |
| number | int | | |
| floor | int | | |
| beds | int | | |
| bldg | int | | Building.bldg_id |
4. 维修记录表(Maintenance)
| 列名 | 类型 | 主键 | 外键 |
| :------ | :----- | :--: | :--- |
| m_id | int | √ | |
| r_id | int | | Room.r_id |
| date | date | | |
| reason | char | | |
| comment | char | | |
5. 入住记录表(CheckIn)
| 列名 | 类型 | 主键 | 外键 |
| :----: | :---- | :--: | :--- |
| ci_id | int | √ | |
| stu_id | int | | Student.stu_id |
| date | date | | |
| room | int | | Room.r_id |
以下是两个视图的创建语句:
1. 查看每个宿舍楼的入住情况视图
```sql
CREATE VIEW View_CheckIn AS
SELECT Building.name AS 'Building', COUNT(CheckIn.ci_id) AS 'Occupancy'
FROM CheckIn
INNER JOIN Room ON CheckIn.room = Room.r_id
INNER JOIN Building ON Room.bldg = Building.bldg_id
GROUP BY Building.name;
```
2. 查看每个学生的宿舍信息视图
```sql
CREATE VIEW View_Student AS
SELECT Student.stu_id, Student.name, Room.number AS 'Room Number', Building.name AS 'Building'
FROM Student
INNER JOIN Room ON Student.room = Room.r_id
INNER JOIN Building ON Room.bldg = Building.bldg_id;
```
以下是触发器的创建语句:
1. 当新增一个学生时,更新宿舍房间的空床位数
```sql
CREATE TRIGGER tr_UpdateRoomVacancy
ON Student
AFTER INSERT
AS
BEGIN
UPDATE Room
SET beds = beds - 1
FROM inserted
WHERE Room.r_id = inserted.room;
END;
```
2. 当删除一个学生时,更新宿舍房间的空床位数
```sql
CREATE TRIGGER tr_UpdateRoomVacancy
ON Student
AFTER DELETE
AS
BEGIN
UPDATE Room
SET beds = beds + 1
FROM deleted
WHERE Room.r_id = deleted.room;
END;
```
以下是权限分配的语句:
1. 创建一个数据库角色
```sql
CREATE ROLE dormitory_manager;
```
2. 授予该角色对学生信息表和入住记录表的 SELECT、INSERT、UPDATE 和 DELETE 权限
```sql
GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Student TO dormitory_manager;
GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.CheckIn TO dormitory_manager;
```
3. 将一个用户添加到该角色
```sql
EXEC sp_addrolemember 'dormitory_manager', 'username';
```
以下是针对某功能模块的复杂查询设计,查询每个宿舍楼的维修记录数量和总花费:
```sql
SELECT Building.name AS 'Building',
COUNT(Maintenance.m_id) AS 'Maintenance Count',
SUM(CASE WHEN Maintenance.reason = 'Plumbing' THEN 50
WHEN Maintenance.reason = 'Electricity' THEN 80
WHEN Maintenance.reason = 'Carpentry' THEN 100
ELSE 0
END) AS 'Total Cost'
FROM Maintenance
INNER JOIN Room ON Maintenance.r_id = Room.r_id
INNER JOIN Building ON Room.bldg = Building.bldg_id
GROUP BY Building.name;
```
阅读全文