我们公司专门使用Windows电脑,当我登录到Windows域时,可以访问一些共享驱动器和数据库。现在我想在容器中运行R,例如遵循教程https://ropenscilabs.github.io/r-docker-tutorial/02-Launching-Docker.html。
我的问题如下:是否有一种方法可以使在此容器中执行的R脚本继承主机操作系统的权限?这似乎对于使用Windows身份验证的MSSQL数据库尤其棘手.....
我们公司专门使用Windows电脑,当我登录到Windows域时,可以访问一些共享驱动器和数据库。现在我想在容器中运行R,例如遵循教程https://ropenscilabs.github.io/r-docker-tutorial/02-Launching-Docker.html。
我的问题如下:是否有一种方法可以使在此容器中执行的R脚本继承主机操作系统的权限?这似乎对于使用Windows身份验证的MSSQL数据库尤其棘手.....
RockScience,您好!
我看到两个选项,它们都可以让您继承权限,而不是传递用户和密码凭据。针对您具体的问题,在Linux方面可以参考以下内容:
如果您采用运行 Windows 容器的方法,请查看 Active Directory gMSA(组管理服务帐户)帐户以及以下 MSDN 文章和视频:
这将使您能够创建一个 Windows 容器和 R 环境。
本教程介绍了如何配置 Linux 上的 SQL Server 以支持 Active Directory (AD) 身份验证,也称为集成身份验证。AD 身份验证使 Windows 或 Linux 上的加入域的客户端能够使用其域凭据和 Kerberos 协议来认证 SQL Server。
AD 身份验证相对于 SQL Server 身份验证具有以下优点:
本教程由以下任务组成:
今天,组管理服务帐户经常用于保护一个计算机或服务与另一个计算机或服务之间的连接。使用它的一般步骤如下:
--security-opt "credentialspec=..."
当容器启动时,以本地系统或网络服务运行的安装服务将显示为作为gMSA运行。这类似于这些帐户在加入域的主机上的工作方式,只不过使用的是gMSA而不是计算机帐户。
当容器中的服务作为本地系统或网络服务运行时,它可以使用Windows集成身份验证来连接到Microsoft SQL Server。
复制
Server=sql.contoso.com;Database=MusicStore;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30
CREATE LOGIN "DEMO\WebApplication1$"
FROM WINDOWS
WITH DEFAULT_DATABASE = "MusicStore"
GO
USE MusicStore
GO
CREATE USER WebApplication1 FOR LOGIN "DEMO\WebApplication1$"
GO
EXEC sp_addrolemember 'db_datareader', 'WebApplication1'
EXEC sp_addrolemember 'db_datawriter', 'WebApplication1'
@Technophobe01表明,使用Windows容器将更加自然地继承AD权限。
为了连接您的文件共享和MS SQL数据库中的R脚本,我建议采取以下措施:
在R脚本中使用连接字符串连接数据库。
这是一个传统的方法,而不是继承某些权限。
请参见SQL Server RODBC Connection。
library(RODBC)
conn <- odbcDriverConnect('driver={SQL Server};server=mysqlhost;database=mydbname;uid=user;pwd=pwd')
d:
docker run -v d:/somedata:/data <container> ls /data
将在容器中挂载驱动器并列出其内容。